python - 生成包含另一个NumPy数组索引的NumPy数组

我想为另一个NumPy数组的给定形状生成一个np.ndarray NumPy数组。前一个数组应包含后一个数组的每个单元格的相应索引。

例子1

假设我们有形状为a = np.ones((3,))(3,)。我希望

[[0]
 [1]
 [2]]


因为a[0]中有a[1]a[2]a,可以通过它们的索引012进行访问。

例子2

对于像(3, 2)这样的b = np.ones((3, 2))形状,已经有很多东西要写。我希望

[[[0 0]
  [0 1]]

 [[1 0]
  [1 1]]

 [[2 0]
  [2 1]]]


因为b中有6个单元格,第一行的相应索引b[0][0]b[0][1],第二行的b[1][0]b[1][1]b[2][0]b[2][1]可以访问相应的索引第三行。因此,我们在生成的数组中的匹配位置获得[0 0][0 1][1 0][1 1][2 0][2 1]

非常感谢您抽出宝贵的时间。让我知道我是否可以以任何方式澄清这个问题。

最佳答案

使用np.indicesnp.stack的一种方法:

np.stack(np.indices((3,)), -1)

#array([[0],
#       [1],
#       [2]])

np.stack(np.indices((3,2)), -1)

#array([[[0, 0],
#        [0, 1]],
#       [[1, 0],
#        [1, 1]],
#       [[2, 0],
#        [2, 1]]])


np.indices返回一个索引网格数组,其中每个子数组代表一个轴:

np.indices((3, 2))

#array([[[0, 0],
#        [1, 1],
#        [2, 2]],        
#       [[0, 1],
#        [0, 1],
#        [0, 1]]])


然后用np.stack转置数组,从不同的轴为每个元素的堆栈索引:

np.stack(np.indices((3,2)), -1)

#array([[[0, 0],
#        [0, 1]],
#       [[1, 0],
#        [1, 1]],
#       [[2, 0],
#        [2, 1]]])

本文翻译自 https://stackoverflow.com/questions/51294185/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 python arrays numpy indices


相关文章:

python - 最常见的字符-用户提交的没有字典或计数器的字符串

php - PHP对象就像数组一样

php - 发送POST数组和内存泄漏

c - 搜索并匹配具有struct的数组元素

python - Python获取图像矩阵PIL

python - 如何在同一.py中,但在不同端口上对客户端和服务器进行多线程处理

python - 有没有一种优雅的方法来使用python中的lxml来计算xml文件中的标记元素?

python - 如何在Python中计算PDF(概率密度函数)?

python - 如何有效地遍历此数据框并使用内置的numpy或pandas执行功能?

python - 保存/加载sympy lambdifed表达式