使用索引提取值数组
Extract values array using indices
我需要从多维数组中提取某些非后续值。
import numpy as np
A = np.array([[[ 0., 4., 0. ],
[ 0.19230769, 4.03846154, 0. ],
[-0.4, 4.8, 0. ],
[ 2., 1., 0. ]],
[[ 1.2, 3.4, 0. ],
[ 2.11538462, 4.42307692, 0. ],
[ 0., 4., 0. ],
[ 3.6, 1.8, 0. ]],
[[ 1.8, 3.1, 0. ],
[ 3.17307692, 4.63461538, 0. ],
[ 0., 4., 0. ],
[ 4., 2., 0. ]]])
对于每个 4x3 块,我想提取任意行
例如以下元素:
A[0,2,:]
A[1,1,:]
A[2,1,:]
所以基本上行B = [2,1,1]
,这会给我:
[-0.4 4.8 0. ]
[ 2.11538462 4.42307692 0. ]
[ 3.17307692 4.63461538 0. ]
如何有效地做到这一点?
你可以使用 "advanced indexing":
In [99]: A[[0,1,2], [2,1,1], :]
Out[99]:
array([[-0.4 , 4.8 , 0. ],
[ 2.11538462, 4.42307692, 0. ],
[ 3.17307692, 4.63461538, 0. ]])
这里的索引数组是
ind1 = [0, 1, 2]
ind2 = [2, 1, 1]
并且由于 ind1
正在索引 A
的第一个轴并且 ind2
正在索引第二个轴,并且第三个轴被完全切片(:
),结果数组 result
具有与 ind1
和 ind2
相同的形状——即 (3,)
——加上完全切片轴的形状,这也是(3,)
。因此,result.shape
是 (3, 3)
和
result[i, j] = A[ind1[i], ind2[i], j]
对于 i = 0,1,2
和 j = 0,1,2
。
我需要从多维数组中提取某些非后续值。
import numpy as np
A = np.array([[[ 0., 4., 0. ],
[ 0.19230769, 4.03846154, 0. ],
[-0.4, 4.8, 0. ],
[ 2., 1., 0. ]],
[[ 1.2, 3.4, 0. ],
[ 2.11538462, 4.42307692, 0. ],
[ 0., 4., 0. ],
[ 3.6, 1.8, 0. ]],
[[ 1.8, 3.1, 0. ],
[ 3.17307692, 4.63461538, 0. ],
[ 0., 4., 0. ],
[ 4., 2., 0. ]]])
对于每个 4x3 块,我想提取任意行
例如以下元素:
A[0,2,:]
A[1,1,:]
A[2,1,:]
所以基本上行B = [2,1,1]
,这会给我:
[-0.4 4.8 0. ]
[ 2.11538462 4.42307692 0. ]
[ 3.17307692 4.63461538 0. ]
如何有效地做到这一点?
你可以使用 "advanced indexing":
In [99]: A[[0,1,2], [2,1,1], :]
Out[99]:
array([[-0.4 , 4.8 , 0. ],
[ 2.11538462, 4.42307692, 0. ],
[ 3.17307692, 4.63461538, 0. ]])
这里的索引数组是
ind1 = [0, 1, 2]
ind2 = [2, 1, 1]
并且由于 ind1
正在索引 A
的第一个轴并且 ind2
正在索引第二个轴,并且第三个轴被完全切片(:
),结果数组 result
具有与 ind1
和 ind2
相同的形状——即 (3,)
——加上完全切片轴的形状,这也是(3,)
。因此,result.shape
是 (3, 3)
和
result[i, j] = A[ind1[i], ind2[i], j]
对于 i = 0,1,2
和 j = 0,1,2
。