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

时间:2014-08-05 14:34:52

标签: python numpy

我有一个大的二维numpy数组A维度250000 x 30和两个一维numpy数组xy。我想要提取A的子数组,包含x中的行和y中的列。哪种方法更有效?

  1. A[x[:,np.newaxis], y]
  2. A[np.ix_(x,y)]

1 个答案:

答案 0 :(得分:2)

基准测试!

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

所以,答案是问题中两种方法之间没有真正的区别。

相关问题