我有一个大小为 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 上循环。
是否有“oneliner”可以在 Matlab 中完成此操作,或者可以快速完成的简单操作?
最佳答案
如果 A
是单行,accumarray
可以使用临时函数完成这项工作:
result = accumarray(b(:), A(:) ,[] , @(x) {x==max(x)});
result = vertcat(result{:}).' .* A;
不确定这会有多快,因为它使用单元格。
如果 A
有几行,您可以对这些行使用循环。
关于arrays - 如何在 Matlab 上进行矩阵运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25978836/