在Matlab中向量化和分离查找操作

卡里姆·埃尔加威(Kareem Ergawy)

我将尝试通过一个例子来解释我要寻找的东西。

假设我有一个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]]

不严格采用这种格式,而是采用任何单独的形式。

丹尼尔

如果我对您的问题理解正确,则希望根据行将其分组。然后维护该行:

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

那你可以用 accumarray

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

对于您的示例,它返回

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章