【问题标题】:Get array of indices for array获取数组的索引数组
【发布时间】:2018-03-01 10:27:39
【问题描述】:

如果我有这样的多维数组:

a = np.array([[9,9,9],[9,0,9],[9,9,9]])

我想获取该数组中每个索引的数组,如下所示:

i = np.array([[0,0],[0,1],[0,2],[1,0],[1,1],...])

我发现的一种方法是这样的,使用np.indices

i = np.transpose(np.indices(a.shape)).reshape(a.shape[0] * a.shape[1], 2)

但这似乎有点笨拙,尤其是考虑到np.nonzero 的存在,这几乎可以满足我的要求。

是否有一个内置的 numpy 函数可以生成 2D numpy 数组中每个项目的索引数组?

【问题讨论】:

  • 我刚刚想到的另一种方法是np.transpose(np.nonzero(a == a)),但这比使用indicesreshape 几乎奇怪

标签: python arrays numpy multidimensional-array


【解决方案1】:

这是一种更简洁的方式(如果顺序不重要):

In [56]: np.indices(a.shape).T.reshape(a.size, 2)
Out[56]: 
array([[0, 0],
       [1, 0],
       [2, 0],
       [0, 1],
       [1, 1],
       [2, 1],
       [0, 2],
       [1, 2],
       [2, 2]])

如果您希望按预期顺序使用,可以使用dstack

In [46]: np.dstack(np.indices(a.shape)).reshape(a.size, 2)
Out[46]: 
array([[0, 0],
       [0, 1],
       [0, 2],
       [1, 0],
       [1, 1],
       [1, 2],
       [2, 0],
       [2, 1],
       [2, 2]])

如果您不想使用reshape,第一种方法是使用np.concatenate() 沿第一个轴连接。

np.concatenate(np.indices(a.shape).T)

【讨论】:

  • 我猜索引的顺序并不重要。我会和第一个一起去。谢谢!
  • 第一个真的不行。试试a = np.zeros((2, 2))
  • 其实已经在 (3,3) 的例子中:可以看到 (1, 2) 出现了两次,而 (2, 1) 没有出现
  • 嗯..好点。也许我会改用np.transpose(np.indices(a.shape)).reshape(a.size, 2)
  • @Samadi Noe 只需在两个方法中间添加一个T
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-22
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多