【发布时间】:2015-01-12 05:21:44
【问题描述】:
我正在尝试做的事情:给定一个二维矩阵,获取每行中满足某些特定条件的元素的列索引。
例如,假设我的矩阵是
M = [16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1]
我的条件是M>6。那么我想要的输出会是这样的
Indices = {[1 4]'; [2 3 4]'; [1 2 4]'; [2 3]';}
阅读this similar question 的答案后,我想出了使用find 和accumarray 的部分解决方案:
[ix, iy] = find(M>6);
Indices = accumarray(ix,iy,[],@(iy){iy});
这几乎给出了我想要的结果——事实上,索引没问题,但它们没有按照我预期的方式排序。例如,Indices{2} = [2 4 3]' 而不是[2 3 4]',我不明白为什么。 2 在 ix 中出现 3 次,分别位于索引 3、6 和 9。 iy 在这些索引处的对应值依次为2、3 和4。究竟是什么创建了观察到的顺序?这只是随意的吗?除了事后对Indices 的每个元素进行排序之外,有没有办法强制它成为我想要的?
【问题讨论】:
标签: matlab matrix cell-array