【问题标题】:How do I rearrange my Numpy array by a specific sequence?如何按特定顺序重新排列我的 Numpy 数组?
【发布时间】:2019-10-10 17:56:59
【问题描述】:

我想重新排列以下 Numpy 数组:

X = [ 1.  5.  2.  4.  2.  4.  1.  5.  2.  1.  2.  1.  5.  6.  2.  6.  5.  4.
  3.  1.  4.  6.  5.  3.  1.  5.  4.  5.  3.  3.  1.  4.  4.  5.  4.  4.
  3.  6.  1.  5.  4.  1.  4.  4.  1.  5.  1.  2.  1.  4.  6.  1.  3.  4.
  1.  6.  3.  1.  1.  5.  6.  4.  5.  2.  6.  3.  1.  3.  4.  6.  3.  2.
  1.  4.  2.  4.  2.  1.  2.  2.  1.  1.  6.  4.  3.  6.  1.  1.  4.  1.
  4.  4. nan nan nan nan]

按以下顺序3, 2, 6, 5, 4, 1

本质上,整个数组的排列方式是所有的 3 在最前面,2,6,5,4,最后是 1。在保留 Numpy 数组而不是将其转换为列表的同时,最好的方法是什么?

【问题讨论】:

标签: python numpy


【解决方案1】:

使用list.index

ind = [3, 2, 6, 5, 4, 1]
sorted(X, key=lambda x : ind.index(x) if x in ind else -1)

输出:

[nan,
 nan,
 nan,
 nan,
 3,
 ...
 1,
 1,
 1]

如果你希望nan 最后出现:

last = len(ind)
sorted(X, key=lambda x : ind.index(x) if x in ind else last)

输出:

[3,
 3,
 ...
 1,
 1,
 nan,
 nan,
 nan,
 nan]

【讨论】:

  • 嗨,克里斯,谢谢!有没有办法保留对象类型,使其成为 numpy 数组而不是列表?
  • @MichikoC 你总是可以用np.array包裹sorted(...)np.array(sorted(X, key = ...))
  • 谢谢,我试过了,但似乎 key 不能是 ind = [3, 2, 6, 5, 4, 1] 这样的东西?
  • 你的意思是不使用lambda?不,您需要在lambda 中使用ind,就像在答案中一样;)
  • 哦!我道歉 - 我的意思是,我尝试使用 np.array(sorted(X, key = ...)) 但似乎 key 不能像 key = ind 之类的东西。
猜你喜欢
  • 2022-09-29
  • 1970-01-01
  • 2019-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-19
相关资源
最近更新 更多