Python Numpy:一种有效的子阵列提取方法

Python Numpy:一种有效的子阵列提取方法,python,numpy,Python,Numpy,我有一个大的二维numpy数组a,大约为250000 x 30,还有两个一维numpy数组x和y。我想提取A的子数组,其中行在x中,列在y中。哪种方法更有效 A[x[:,np.newaxis],y] A[np.ix_ux(x,y)] 基准测试 import numpy as np # some data A = np.random.random((250000, 30)) # some random indices x = np.random.randint(0, 250000, 15000

我有一个大的二维numpy数组
a
,大约为
250000 x 30
,还有两个一维numpy数组
x
y
。我想提取A的子数组,其中行在
x
中,列在
y
中。哪种方法更有效

  • A[x[:,np.newaxis],y]
  • A[np.ix_ux(x,y)]
  • 基准测试

    import numpy as np
    
    # some data
    A = np.random.random((250000, 30))
    
    # some random indices
    x = np.random.randint(0, 250000, 150000)
    y = np.random.randint(0, 30, 10)
    
    def method1(A, x, y):
        return A[x[:, np.newaxis], y]
    
    def method2(A, x, y):
        return A[np.ix_(x,y)]
    
    def method3(A, x, y):
        return A[x][:,y]
    
    def method4(A, x, y):
        return A[:,y][x]
    
    这三种方法给出了以下基准:

    method1: 87.7 ms
    method2: 89.2 ms
    method3: 115 ms
    method4: 141 ms
    
    因此,答案是这两种方法在这个问题上没有真正的区别