我想为另一个NumPy数组的给定形状生成一个np.ndarray
NumPy数组。前一个数组应为后一个数组的每个单元格包含相应的索引。
示例1
假设我们有a = np.ones((3,))
,其形状为(3,)
。我希望
[[0]
[1]
[2]]
因为a[0]
中有a[1]
,a[2]
和a
,可以通过它们的索引0
,1
和{{ 1}}。
示例2
对于2
这样的(3, 2)
形状,已经有很多东西要写。我希望
b = np.ones((3, 2))
因为[[[0 0]
[0 1]]
[[1 0]
[1 1]]
[[2 0]
[2 1]]]
中有6个单元格,第一行的相应索引b
,b[0][0]
,b[0][1]
的{{1}}可以访问第二行,b[1][0]
,第三行b[1][1]
。因此,我们在生成的数组中的匹配位置处得到b[2][0]
,b[2][1]
,[0 0]
,[0 1]
,[1 0]
和[1 1]
。
非常感谢您抽出宝贵的时间。让我知道我是否可以以任何方式澄清这个问题。
答案 0 :(得分:4)
使用np.indices
和np.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]]])