【问题标题】:Turn a vector's indexes into its content and vice-versa将向量的索引转换为其内容,反之亦然
【发布时间】:2016-09-07 20:30:45
【问题描述】:

我正在寻找一种有效的方式来转动矢量:

[1,1,1,2,3,3,3,4,4,4,5,1]

变成一个向量的向量,这样:

[[1,2,3,12],[4],[5,6,7],[8,9,10],[11]]

一般:

newVector[i] = indexes of the initial vector that contained i

最好在 Matlab/Octave 中使用,但我只是好奇是否有一种有效的方法来实现这一点。

我尝试在 google 和 stack 上查找它,但我不知道如何称呼这个“操作”,所以什么也没有出现。

【问题讨论】:

  • 通过使用for-loop 自己编写代码来证明您已经尝试过了
  • 你能保证所有的值都来自 1:n 吗?或者原始向量可以是[1 2 10 2]吗?
  • 我愿意接受空向量

标签: matlab vector indexing octave


【解决方案1】:

有一个简单的方法可以使用accumarray

A = [1,1,1,2,3,3,3,4,4,4,5,1]
accumarray(A',A',[],@(x){find(ismember(A,x))})

但是下一次,请在你的问题中展示你自己的尝试

或者(但前提是A1 开始并且不跳过任何数字)

accumarray(A', (1:size(A,2))', [], @(x){sort(x)})

【讨论】:

  • 谢谢。你说得对,我应该发布一些代码,但我是 matlab 新手,当时想不出办法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 2011-10-08
  • 2013-03-15
  • 2019-09-19
  • 2013-12-29
  • 2011-09-22
  • 2012-05-14
相关资源
最近更新 更多