用MATLAB实现多矢量化?
我不确定我是否正确命名了此问题: 我所拥有的:用MATLAB实现多矢量化?,matlab,vectorization,Matlab,Vectorization,我不确定我是否正确命名了此问题: 我所拥有的: X = [0 1 2 3 4 5 6 7 8 9; 6 2 5 5 4 5 6 3 7 6]; Z = [0 0 0 1 0 0 0 0 0 0; 0 0 0 0 0 1 0 0 0 0; 0 0 0 0 0 0 0 0 0 1; 0 0 0 0 0 0 0 0 1 0]; 现在我的问题是: 我们将矩阵X的第二整行与矩阵Z进行比较(两者的coulmn数相同,但行数可能不同) 我希望得到的结果如下: ans = [5 5 6 7] 因为: X(2
X = [0 1 2 3 4 5 6 7 8 9; 6 2 5 5 4 5 6 3 7 6];
Z = [0 0 0 1 0 0 0 0 0 0; 0 0 0 0 0 1 0 0 0 0; 0 0 0 0 0 0 0 0 0 1; 0 0 0 0 0 0 0 0 1 0];
现在我的问题是:
我们将矩阵X的第二整行与矩阵Z进行比较(两者的coulmn数相同,但行数可能不同)
我希望得到的结果如下:
ans = [5 5 6 7]
因为:
X(2,Z(1,:)) = 5
X(2,Z(2,:)) = 5
X(2,Z(3,:)) = 6
X(2,Z(4,:)) = 7
所以我的问题是,我想做它没有任何循环,细胞或annonymous函数。通过矢量化一切来缩短代码。我能一行完成吗
如果我执行以下操作,则上述操作不起作用:
X(2,Z(:,:))
它实际上非常简单-您可以在
X
的第二行和Z
的转置之间使用矩阵乘法:
> X(2,:)*Z'
ans =
5 5 6 7
>
@Paul R的解决方案非常好,下面是两行中的另一种方法:
[myRow, myCol] = find(Z');
X(2,myRow)
. 谢谢。有了八度音阶,我可以用
5 5 7 6
-它在MATLAB中工作吗?@PaulR没有注意到顺序的变化,现在应该可以了。是的,现在似乎可以用了-不管怎样,它现在可以用八度音阶给我5 5 6 7
。