在Matlab中矢量化并分离查找操作

时间:2015-10-29 21:26:42

标签: arrays matlab matrix vectorization

我将尝试通过一个例子解释我在寻找什么。

假设我有一个像这样的3x4 2D矩阵:

1 0 0 0
1 1 1 0
0 0 1 1

这是可以通过以下方式生成的matlab矩阵:

x = [1 0 0 0; 1 1 1 0; 0 0 1 1]

现在,如果我执行这样的命令:

[~, y] = find(x([1 2], :) == 1)

y将是一个向量,其中包含第1行和第2行中值为1的列索引。具体来说,对于此示例:

y = [1 1 2 3]

但是,我希望实现的是将输入数组的每个元素(此处为[1 2])中的非零列分开,而不必迭代此输入数组的元素(以矢量化方式)。

所以我希望得到这样的输出:

y = [[1] [1 2 3]]

严格来说不是这种格式,而是以任何分开的形式。

1 个答案:

答案 0 :(得分:4)

如果我理解你的问题,你想根据这一行对它进行分组。然后保持行:

[r, y] = find(x([1 2], :) == 1)

然后你可以使用accumarray

y2 = accumarray(r,y,[max(r),1],@(x)({x}))

对于您的示例,它将返回

y2 = {[1],[1 2 3]}