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

标签 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]]

不严格采用这种格式,而是采用任何分隔形式。

最佳答案

如果我没理解错你的问题,你想根据行对其进行分组。然后维护行:

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

然后你可以使用accumarray

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

对于你的例子,它返回

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

关于arrays - 在 Matlab 中向量化和分离查找操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33424907/

相关文章:

Java,在数组中移动元素

python - 切片数组并通过在 Python 中使用循环为每个小数组指定特定名称

matlab - 循环创建元胞数组

c++ - 将 float * 或 int * 分配给 mxArray

python - 你如何在 Python 中旋转一个字符串数组?

javascript - 根据字符串获取永久数组项

Java - 从具有两个给定索引的数组返回一个数组

matlab - 如何计算矩阵中1和0的个数?

matlab - 基于与向量相同索引的列的条件

r - 将矩阵划分为 R 中的列表时出现奇怪的输出