【问题标题】:How to do a matrix manipulation on Matlab?如何在 Matlab 上进行矩阵运算?
【发布时间】:2015-06-01 05:42:23
【问题描述】:

我有一个大小为 m x n 的矩阵 A 和另一个大小为 1 x n 的矩阵 b(在 Matlab 中)。

矩阵 b 由 1 的序列、2 的序列、3 的序列等组成,直到某个值 k。

(例如 b = [1 1 1 2 2 2 3 4 4],n = 9)

我想取 A,对于 A 中的每一行,选择每个段中的最大值,将该子序列中的其他所有内容归零。

例如,对于一行 A = [0 -1 2 3 4 1 3 4 5]) 我会得到

[0 0 2 0 4 0 3 0 5]

如果 A (m > 1) 中有多行,则每行都应该发生这种情况。

我可以使用 for 循环轻松做到这一点,但它的工作速度非常慢,因为我在 m 和 n 上都循环。

在 Matlab 中是否有一个“oneliner”可以做到这一点,或者一些简单的快速工作?

【问题讨论】:

    标签: arrays matlab matrix


    【解决方案1】:

    如果A 是单行,accumarray 可以使用临时函数完成这项工作:

    result = accumarray(b(:), A(:) ,[] , @(x) {x==max(x)});
    result = vertcat(result{:}).' .* A;
    

    不确定这会有多快,因为它使用单元格。

    如果A 有几行,您可以对这些行使用循环。

    【讨论】:

    • +1 哇!不知道 accumarray 采用了自定义函数。很棒的代码高尔夫。
    • @SanjayManohar 谢谢!它不仅需要自定义功能;函数输出可以是元胞数组!非常灵活
    猜你喜欢
    • 2020-08-11
    • 2013-08-13
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多