Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我想对矩阵A的列进行分组,这些列在Matlab中的第三行具有相同的值_Matlab - Fatal编程技术网

我想对矩阵A的列进行分组,这些列在Matlab中的第三行具有相同的值

我想对矩阵A的列进行分组,这些列在Matlab中的第三行具有相同的值,matlab,Matlab,对于矩阵a(4行,1000列)。我想对矩阵A中第三行具有相同值的列进行分组。所以我必须有第三行包含相同值的子矩阵 例如: 如果: 然后 结果可以是一个单元格的形式。这里有一个可能的黑客攻击(警告:我无法检查): 在您显示的示例中,第3行中有4个唯一元素,因此您应该获得4个子矩阵,但仅显示3 这里有一个方法: clear all; %data A = [1 4 5 2 2 2 2 1 1 5; 1 4

对于矩阵a(4行,1000列)。我想对矩阵A中第三行具有相同值的列进行分组。所以我必须有第三行包含相同值的子矩阵

例如:

如果:

然后

结果可以是一个单元格的形式。

这里有一个可能的黑客攻击(警告:我无法检查):


在您显示的示例中,第3行中有4个唯一元素,因此您应该获得4个子矩阵,但仅显示3

这里有一个方法:

clear all;

%data
A = [1     4     5     2     2     2     2     1     1     5;
     1     4     5     4     4     2     2     4     5     2;
     3     3     3     3     4     1     3     5     3     4;
     4     5     5     5     4     1     5     5     5     5
     ]

%engine
row = 3;
b   = unique(A(row,:));
r   = arrayfun(@(i) A(:,A(row,:)==b(i)),1:length(b), 'UniformOutput',false);

r{:}

您可以使用以下命令在单行中进行分配:

这样,
out{i}
包含
A
的所有列,其中
A
的第三行等于
i
(如果没有有效列,则为空)

如果希望
out{i}
包含与
A
第三行中第i个最小唯一值对应的列,可以首先从统计工具箱使用:

[idx,correspondingEntryInA] = grp2idx(A(3,:)'); %'#
out = accumarray(idx, (1:size(A,2)), [], @(x){A(:,x)} );
这里,
out{i}
包含与
correspondingtryina(i)

相对应的列。它不会完全满足你的要求,但它会让你走上一段路。
A =

 1     4     5     2     2     2     2     1     1     5
 1     4     5     4     4     2     2     4     5     2
 3     3     3     3     4     1     3     5     3     4
 4     5     5     5     4     1     5     5     5     5

specialRow=3;
unqCols = unique(A(specialRow,:));
numUnq = length(unqCols);
sepMats{numUnq}=[];

for i=1:numUnq
    sepMats{i} = A(:,A(specialRow,:)==unqCols(i));
end
clear all;

%data
A = [1     4     5     2     2     2     2     1     1     5;
     1     4     5     4     4     2     2     4     5     2;
     3     3     3     3     4     1     3     5     3     4;
     4     5     5     5     4     1     5     5     5     5
     ]

%engine
row = 3;
b   = unique(A(row,:));
r   = arrayfun(@(i) A(:,A(row,:)==b(i)),1:length(b), 'UniformOutput',false);

r{:}
A = [1     4     5     2     2     2     2     1     1     5;
     1     4     5     4     4     2     2     4     5     2;
     3     3     3     3     4     1     3     5     3     4;
     4     5     5     5     4     1     5     5     5     5
     ];

out = accumarray(A(3,:)', (1:size(A,2)), [], @(x){A(:,x)} );
[idx,correspondingEntryInA] = grp2idx(A(3,:)'); %'#
out = accumarray(idx, (1:size(A,2)), [], @(x){A(:,x)} );