Python 生成包含另一个NumPy数组索引的NumPy数组
我想为另一个NumPy数组的给定形状生成一个Python 生成包含另一个NumPy数组索引的NumPy数组,python,arrays,numpy,indices,Python,Arrays,Numpy,Indices,我想为另一个NumPy数组的给定形状生成一个np.ndarrayNumPy数组。前一个数组应包含后一个数组中每个单元格的相应索引 示例1 假设我们有a=np.one((3,),它的形状是(3,)。我想 [[0] [1] [2]] [[[0 0] [0 1]] [[1 0] [1 1]] [[2 0] [2 1]]] 因为a中有a[0]、a[1]和a[2],可以通过它们的索引0、1和2来访问它们 示例2 对于(3,2)的形状,比如b=np.ones((3,2))已经有很
np.ndarray
NumPy数组。前一个数组应包含后一个数组中每个单元格的相应索引
示例1
假设我们有a=np.one((3,)
,它的形状是(3,)
。我想
[[0]
[1]
[2]]
[[[0 0]
[0 1]]
[[1 0]
[1 1]]
[[2 0]
[2 1]]]
因为a
中有a[0]
、a[1]
和a[2]
,可以通过它们的索引0
、1
和2
来访问它们
示例2
对于(3,2)
的形状,比如b=np.ones((3,2))
已经有很多东西要写了。我想
[[0]
[1]
[2]]
[[[0 0]
[0 1]]
[[1 0]
[1 1]]
[[2 0]
[2 1]]]
由于b
中有6个单元格,可通过相应的索引b[0][0]
访问,因此第一行为b[0][1]
,第二行为b[1][1]
,b[2][0]
,第三行为b[2][1]
。因此,我们在生成的数组中的匹配位置获得[0 0]
,[0 1]
,[1]
,[2 0]
和[2 1]
非常感谢您抽出时间。请告诉我是否可以以任何方式澄清问题。使用
np.index
和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.index
返回索引网格数组,其中每个子数组表示一个轴:
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]]])
使用
np.index
和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.index
返回索引网格数组,其中每个子数组表示一个轴:
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]]])
第一个数组具有形状
(3,1)
,第二个数组具有形状(3,2,2)
。你如何从(3,)
到(3,1)
以及从(3,2)
到(3,2,2)
?此外,什么决定了结果数组的内容?如果输入是,比如说,(4,1)
,或者(4,3,2)
,您会期望什么?@fuglede感谢您的评论。我试图进一步澄清这个问题。关于您在评论中提出的问题:(3,)
导致(3,1)
,因为有3个单元格可以被1个索引访问-(3,2)
导致(3,2,2)
,因为有6个单元格形成3行2列,每个2个索引都可以唯一地访问它们。因此,首先,生成的数组与输入数组具有相同的形状-加上索引数量的一个额外维度<因此,代码>(4,1)将导致(4,1,2)
,(4,3,2)
将导致(4,3,2,3)
。我希望这有帮助?:-)是的,这更清楚了,谢谢。在这种情况下,提供的答案似乎就是你想要的?@fuglede是的,我也这么认为。只是想澄清一下,以防你有其他想法或答案。:-)第一个数组具有形状(3,1)
,第二个数组具有形状(3,2,2)
。你如何从(3,)
到(3,1)
以及从(3,2)
到(3,2,2)
?此外,什么决定了结果数组的内容?如果输入是,比如说,(4,1)
,或者(4,3,2)
,您会期望什么?@fuglede感谢您的评论。我试图进一步澄清这个问题。关于您在评论中提出的问题:(3,)
导致(3,1)
,因为有3个单元格可以被1个索引访问-(3,2)
导致(3,2,2)
,因为有6个单元格形成3行2列,每个2个索引都可以唯一地访问它们。因此,首先,生成的数组与输入数组具有相同的形状-加上索引数量的一个额外维度<因此,代码>(4,1)将导致(4,1,2)
,(4,3,2)
将导致(4,3,2,3)
。我希望这有帮助?:-)是的,这更清楚了,谢谢。在这种情况下,提供的答案似乎就是你想要的?@fuglede是的,我也这么认为。只是想澄清一下,以防你有其他想法或答案。:-)