[英]Multi-dimensional array notation in Python
我有两个数组A
和i
,尺寸分别为(1, 3, 3)
和(1, 2, 2)
。 我想定义一个新数组I
,它基于i
给出A
的元素。 附加了当前和所需的输出。
import numpy as np
i=np.array([[[0,0],[1,2],[2,2]]])
A = np.array([[[1,2,3],[4,5,6],[7,8,9]]], dtype=float)
I=A[0,i]
print([I])
当前输出为
[array([[[[1.000000000, 2.000000000, 3.000000000],
[1.000000000, 2.000000000, 3.000000000]],
[[4.000000000, 5.000000000, 6.000000000],
[7.000000000, 8.000000000, 9.000000000]],
[[7.000000000, 8.000000000, 9.000000000],
[7.000000000, 8.000000000, 9.000000000]]]])]
所需的输出是
[array(([[[1],[6],[9]]]))
In [131]: A.shape, i.shape
Out[131]: ((1, 3, 3), (1, 3, 2))
前导大小为 1 的维度只是添加了一个[]
层,并使索引变得复杂(有点):
In [132]: A[0]
Out[132]:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
这是我认为你想要的索引:
In [133]: A[0,i[0,:,0],i[0,:,1]]
Out[133]: array([1, 6, 9])
如果您确实需要尾随尺寸 1 尺寸,请在以下之后添加:
In [134]: A[0,i[0,:,0],i[0,:,1]][:,None]
Out[134]:
array([[1],
[6],
[9]])
根据所需的数字,我推断您想使用i
的 2 列作为A
的两个不同维度的索引:
In [135]: i[0]
Out[135]:
array([[0, 0],
[1, 2],
[2, 2]])
做同样事情的另一种方法:
In [139]: tuple(i.T)
Out[139]:
(array([[0],
[1],
[2]]),
array([[0],
[2],
[2]]))
In [140]: A[0][tuple(i.T)]
Out[140]:
array([[1],
[6],
[9]])
你必须输入
I=A[0,:1,i[:,1]]
你可以使用take
的方法。 但是, take
使用平面索引,因此您需要使用[0, 5, 8]
作为索引。
这是一个例子:
>>> I = [A.shape[2] * x + y for x,y in i[0]] # Convert to flat indexes
>>> I = np.expand_dims(I, axis=(1,2))
>>> A.take(I)
array([[[1.]],
[[6.]],
[[9.]]])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.