MATLAB小函數:找出矩陣中某一列(行)元素全相等(不等)的列(行)所在下標及對應元素值


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM