2014-09-22 97 views
4

我有一个大小为m x n的矩阵A和另一个大小为1 x n的矩阵b(在Matlab中)。矩阵b是这样的:它由1的序列组成,然后是2的序列,然后是3的序列等,直到某个值k。如何在Matlab上做矩阵操作?

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

我想利用A,以及用于在每一行,选择在每个段中的最大值,回零该子序列中的所有其他内容。

因此,例如,对于一个行A = [0 -1 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中做,或者简单的工作很快?

回答

3

如果A是单行,accumarray可以用做临时函数工作:

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

不知道有多快,这将是,因为它使用的细胞。

如果A有几行,则可以在行上使用循环。

+0

谢谢!但不能用零填充。 – kloop 2014-09-22 16:34:45

+0

@kloop对不起,我读得太快了。对它进行工作 – 2014-09-22 16:35:17

+0

@kloop更正了 – 2014-09-22 16:38:06