matlab - 创建没有 for 循环的类矩阵

标签 matlab matrix

我正在尝试在 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 可以是任意维度。非常感谢任何帮助。

最佳答案

您可以使用 maxsub2ind为每行标记具有最大值的列,如下所示:

[~,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 matrixfull(Bs)

关于matlab - 创建没有 for 循环的类矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20479721/

相关文章:

algorithm - 排列的索引

matlab - 使用 MATLAB 的绘图功能作为 Fortran 程序的交互部分

java - 使用 OpenCV 从图像序列中获取中值图片

windows - 如何隐藏随我的应用程序一起打开的控制台窗口?

matlab - 矩阵行 block 的矢量化混洗

python - 如何使用 Julia 查找矩阵中的连通分量

python - 用 python 解决一个 3x3 Frog 谜题

c++ - 插入稀疏矩阵时出现问题

matlab - 如何从matlab中的单元格中提取数字?

java - 卷积实现未按预期工作