【问题标题】:multi-vectorization via MATLAB?通过 MATLAB 进行多向量化?
【发布时间】:2013-08-26 07:27:11
【问题描述】:

我不确定我是否正确地命名了这个问题:

我有什么:

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 进行比较(两者的列数相同,但行数可能不同) 我想要达到的结果如下:

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

所以我的问题是我想在没有任何循环、单元格或匿名函数的情况下执行此操作。只需通过矢量化所有内容来缩短代码。我可以在一行中完成吗??

如果我执行以下操作,上述内容将不起作用:

X(2,Z(:,:))

【问题讨论】:

    标签: matlab vectorization


    【解决方案1】:

    其实很简单——你可以在X的第二行和Z的转置之间使用矩阵乘法:

    > X(2,:)*Z'
    ans =
    
       5   5   6   7
    
    > 
    

    【讨论】:

    • 。谢谢。
    【解决方案2】:

    @Paul R 的解决方案非常好,这里是 2 行的替代方式:

    [myRow, myCol] = find(Z');
    X(2,myRow)
    

    【讨论】:

    • 用 Octave 给我5 5 7 6 - 它在 MATLAB 中工作吗?
    • @PaulR 没有注意到顺序的变化,现在应该可以了。
    • 是的,这似乎现在可以工作了 - 现在无论如何它都会在 Octave 中给我5 5 6 7
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    相关资源
    最近更新 更多