将此实现转换为更有效的numpy用法

时间:2017-03-24 22:39:06

标签: python numpy

将此实现转换为更有效的numpy

用法

基本上对于每个实例D [i]< = num,我想使用该索引将numpy x [i]添加到nx并将numpy y [i]添加到新的numpy数组nx,ny中。

row, = D.shape
for i in range(row):
    if D[i] <= num:
        nx.append(x[i])
        ny.append(y[i])

2 个答案:

答案 0 :(得分:4)

您可以使用masking -

mask = D<=num
nx, ny = x[mask], y[mask]

答案 1 :(得分:2)

您可以使用np.where

w = np.where(D <= num)[0]
nx, ny = x[w], y[w]

演示

D = np.arange(10)
x = np.arange(10)
y = np.arange(10)[::-1]
num = 4

w = np.where(D <= num)[0]
nx, ny = x[w], y[w]

print(nx, ny)

[0 1 2 3 4] [9 8 7 6 5]

您也可以使用np.flatnonzero来达到同样的效果。

D = np.arange(10)
x = np.arange(10)
y = np.arange(10)[::-1]
num = 4

w = np.flatnonzero(D <= num)
nx, ny = x[w], y[w]

print(nx, ny)

[0 1 2 3 4] [9 8 7 6 5]

天真的时间测试
有大量数据

k = 100000
D = np.arange(k)
x = np.arange(k)
y = np.arange(k)[::-1]
num = k // 2

enter image description here