我正在尝试在 MATLAB 中创建一个类矩阵,最好不要使用 for 循环。所以我有 A
:
A = [ 1 2 3 4;
2 5 4 1;
7 2 3 4];
现在我想创建一个类矩阵,所以我想寻找每一列的最大值,无论那个位置是什么,都会变成“1”。所以使用 A
,我希望 B
看起来像这样:
B = [ 0 0 0 1;
0 1 0 0;
1 0 0 0];
我一直在尝试使用以下代码创建 B
矩阵,然后使用以下代码在每一列中搜索最大值:
[rows_A columns_A] = size(A);
B = zeros(rows_A, columns_A);
max(A, [], 2);
然后我尝试使用 ind2sub
获取 A
中的位置,这样我就可以在 B
矩阵中放置一个“1” .这种方法行不通。矩阵 A
可以是任意维度。非常感谢任何帮助。
最佳答案
您可以使用 max
和 sub2ind
为每行标记具有最大值的列,如下所示:
[~,indMaxCol] = max(A,[],2);
B = zeros(size(A));
B(sub2ind(size(B),1:size(B,1),indMaxCol.')) = 1 %' flag largest column, each row
B =
0 0 0 1
0 1 0 0
1 0 0 0
另一种不需要 sub2ind
的解决方案是创建一个 sparse
矩阵:
Bs = sparse(1:size(B,1),indMaxCol,1)
Bs =
(3,1) 1
(2,2) 1
(1,4) 1
这可以转换为 full matrix与 full(Bs)
。
关于matlab - 创建没有 for 循环的类矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20479721/