MATLAB小函數:找出矩陣中某一列(行)元素全相等(不等)的列(行)所在下標及對應元素值
作者:凱魯嘎吉 - 博客園 http://www.cnblogs.com/kailugaji/
1. 找出矩陣中某一列(行)元素全相等的列(行)所在下標及對應元素值
給定一個矩陣,一列一列找,如果某一列中全部元素都是相同的值,則返回該列的id號。例如:aa矩陣中第2列元素值全是2.3,第5列元素值全是7,則返回列下標值2, 5與相應的元素值2.3, 7。
aa = 5.0000 2.3000 4.0000 8.0000 7.0000 6.0000 2.3000 4.0000 6.0000 7.0000 8.0000 2.3000 1.0000 4.0000 7.0000 8.0000 2.3000 6.0000 4.0000 7.0000 1.0000 2.3000 5.0000 9.0000 7.0000 0 2.3000 1.0000 5.0000 7.0000 3.5000 2.3000 6.4000 8.6000 7.0000 output = 2.0000 2.3000 5.0000 7.0000
1.1 MATLAB程序
function output=Column_consistent(data) % MATLAB 找出矩陣中某一列元素全相等的列所在的下標及對應的元素值 % Input: 數據集 % Output:列下標號 元素值 [~, dim]=size(data); index=[]; value_col=[]; for i=1:dim result_frequency=tabulate(data(:, i)); value=result_frequency(result_frequency(:, 3)==100); if ~isempty(value) index=[index; i]; value_col=[value_col; value]; end end output=[index value_col];
1.2 結果
>> aa=[5 2.3 4 8 7; 6 2.3 4 6 7; 8 2.3 1 4 7; 8 2.3 6 4 7; 1 2.3 5 9 7;0 2.3 1 5 7; 3.5 2.3 6.4 8.6 7] aa = 5.0000 2.3000 4.0000 8.0000 7.0000 6.0000 2.3000 4.0000 6.0000 7.0000 8.0000 2.3000 1.0000 4.0000 7.0000 8.0000 2.3000 6.0000 4.0000 7.0000 1.0000 2.3000 5.0000 9.0000 7.0000 0 2.3000 1.0000 5.0000 7.0000 3.5000 2.3000 6.4000 8.6000 7.0000 >> output=Column_consistent(aa) output = 2.0000 2.3000 5.0000 7.0000
注意:如果是找出矩陣中某一行元素全相等的行所在下標及對應元素值,只需把數據轉置一下就可以,例如,bb數據集中第1行元素全為1,第4行元素全為0,則返回行下標1, 4和相應的元素值1, 0。
>> bb=[1 1 1 1; 2 5 4 7; 3 5 4 8; 0 0 0 0; 6 8 4 5] bb = 1 1 1 1 2 5 4 7 3 5 4 8 0 0 0 0 6 8 4 5 >> output=Column_consistent(bb') output = 1 1 4 0
2. 統計矩陣中某一列(行)元素全不等的列(行)的個數及所在下標
2.1 MATLAB程序
function [index, sum_no_consistent]=Column_no_consistent(data) % MATLAB 統計矩陣中某一列元素全不一致的列的個數及所在下標 % Input: % data: 數據集 % Output: % index: 列下標號 元素值 % sum_no_consistent: 統計矩陣中某一列元素全不一致的列的個數 [Num, dim]=size(data); index=[]; value_col=[]; for i=1:dim result_frequency=tabulate(data(:, i)); value=(sum(result_frequency(:, 3)~=0)==Num); if value~=0 index=[index; i]; value_col=[value_col; value]; end end sum_no_consistent=sum(value_col);
2.2 結果
>> cc=[5 2.3 4 8 7; 6 2.3 4 6 7; 8 2.3 1 4 7; 8.1 2.3 6 4.1 7; 1 2.3 5 9 7;0 2.3 1 5 7; 3.5 2.3 6.4 8.6 7] cc = 5.0000 2.3000 4.0000 8.0000 7.0000 6.0000 2.3000 4.0000 6.0000 7.0000 8.0000 2.3000 1.0000 4.0000 7.0000 8.1000 2.3000 6.0000 4.1000 7.0000 1.0000 2.3000 5.0000 9.0000 7.0000 0 2.3000 1.0000 5.0000 7.0000 3.5000 2.3000 6.4000 8.6000 7.0000 >> [index, sum_no_consistent]=Column_no_consistent(cc) index = 1 4 sum_no_consistent = 2
cc數據集里面有2列元素全不相同,分別是第1和第4列。同樣,如果想統計有多少行元素全不相同,只需轉置數據即可,例如,將cc改為cc'。
2020-06-04