gpt4 book ai didi

matlab - accumarray 构造的元胞数组中元素的顺序

转载 作者:太空宇宙 更新时间:2023-11-03 19:59:42 24 4
gpt4 key购买 nike

我想做的是:给定一个二维矩阵,获取每行中满足某些特定条件的元素的列索引。

例如,假设我的矩阵是

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 的答案后我使用 findaccumarray 想出了这个部分解决方案:

[ix, iy] = find(M>6);
Indices = accumarray(ix,iy,[],@(iy){iy});

这给出了非常接近我想要的结果——事实上,索引是正确的,但它们没有按我预期的方式排序。例如,Indices{2} = [2 4 3]' 而不是 [2 3 4]',我不明白为什么。 ix 中出现了 3 次 2,分别位于索引 369iy 在这些索引处的相应值依次为 234。究竟是什么创造了观察到的秩序?它只是任意的吗?除了之后对 Indices 的每个元素进行排序之外,有没有办法强制它成为我想要的?

最佳答案

这是用 arrayfun 解决它的一种方法 -

idx = arrayfun(@(x) find(M(x,:)>6),1:size(M,1),'Uni',0)

celldisp(idx) 显示输出 -

idx{1} =
1 4
idx{2} =
2 3 4
idx{3} =
1 2 4
idx{4} =
2 3

要继续使用 accumarray,您可以使用 sort 包装 iy 以获得您想要的输出,它看起来可能不太漂亮 -

Indices = accumarray(ix,iy,[],@(iy){sort(iy)})

输出-

>> celldisp(Indices)
Indices{1} =
1
4
Indices{2} =
2
3
4
Indices{3} =
1
2
4
Indices{4} =
2
3

关于matlab - accumarray 构造的元胞数组中元素的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26936411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com