基于向量 - MATLAB对列替换进行矢量化

时间:2015-02-24 04:19:41

标签: matlab matrix vector vectorization

我想以矢量化的方式基于矢量值替换矩阵的第n列的值。
输入:

[0 0 0 0]  
[0 0 0 0]  
[0 0 0 0]  
[0 0 0 0]  

矢量:

[2]  
[4]  
[1]  
[3]  

预期产出:

[0 1 0 0]  
[0 0 0 1]  
[1 0 0 0]  
[0 0 1 0]  

带有for循环的Matlab代码:

A = zeros(4,4);  
b = [2; 4; 1; 3];  
for row=1:4  
   A(row, b(row)) = 1;  
endfor  

matlab代码与sub2ind:

A = zeros(4,4);  
b = [2; 4; 1; 3];  
c = [[1:length(b)]' b];  
A(sub2ind(size(A), c(:,1), c(:,2))) = 1;  

Matlab中有更多的矢量化方式吗?谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用sub2ind原始版本以矢量化方式解决它 -

A( (b(:)-1)*size(A,1) + [1:numel(b)]' ) = 1;

工作原理:由于b的元素是列索引而MATLAB遵循列主索引,因此我们需要将每个此类列索引与{中的行数相乘{1}}在启动该列之前获取元素数量,即A。然后,添加相应的行索引,即(b(:)-1)*size(A,1),以给出最终的线性索引,与[1:numel(b)]'生成的索引相同。最后,使用这些线性索引将sub2ind索引,并根据问题的要求将其设置为所有A

相关问题