Python 从numpy中的索引矩阵创建新矩阵
我有一个带形状(k,l,m)的3D numpy数组Python 从numpy中的索引矩阵创建新矩阵,python,arrays,numpy,Python,Arrays,Numpy,我有一个带形状(k,l,m)的3D numpy数组a,和一个带形状(k,l)的2D numpy数组B,其中索引(介于0和m-1之间),我想创建一个带形状(k,l)的新2D数组C,如下所示: import numpy as np A = np.random.random((2,3,4)) B = np.array([[0,0,0],[2,2,2])) C = np.zeros((2,3)) for i in range(2): for j in range(3): C[i,
a
,和一个带形状(k,l)的2D numpy数组B
,其中索引(介于0和m-1之间),我想创建一个带形状(k,l)的新2D数组C
,如下所示:
import numpy as np
A = np.random.random((2,3,4))
B = np.array([[0,0,0],[2,2,2]))
C = np.zeros((2,3))
for i in range(2):
for j in range(3):
C[i,j] = A[i, j, B[i,j]]
有更有效的方法吗?使用Numpy库函数的内置例程名
。并将代码转换为
C = np.fromfunction(lambda i, j: A[i, j, B[i,j]], (5, 5))
使用Numpy库的函数
中的内置例程名称。并将代码转换为
C = np.fromfunction(lambda i, j: A[i, j, B[i,j]], (5, 5))
设置:
使用整数索引选择值,然后重塑形状
x,y = np.indices(a.shape[:-1])
c = a[x,y,b]
print(c)
使用
设置:
使用整数索引选择值,然后重塑形状
x,y = np.indices(a.shape[:-1])
c = a[x,y,b]
print(c)
使用
你应该包括一个最小的数据示例-a
和B
对不起,我刚刚修正了你应该包括一个最小的数据示例-a
和B
对不起,我刚刚修正了谢谢!它给了我20倍的加速!我只需要将dtype='int'
传递给np.fromffunction
,因为I
和j
被用作索引库!它给了我20倍的加速!我只需要将dtype='int'
传递给np.fromffunction
,因为I
和j
被用作索引
[[ 3 4 11]
[14 17 22]]
x,y = np.ix_(np.arange(a.shape[0]),np.arange(a.shape[1]))
d = a[x,y,b]