2017-03-24 22 views
0

一个更有效地使用转换此实现numpy的更有效的使用转换此实现的numpy的

基本上每个实例d [I] < = NUM​​,我想使用该索引添加numpy的X [我] nx和numpy y [i] ny它到新的numpy阵列nx,ny。

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

回答

4

您可以使用masking -

mask = D<=num 
nx, ny = x[mask], y[mask] 
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

+0

有没有真正的理由面膜指数转换,无论是'where','flatnonzero'或其他工具。 – user2357112

+0

@ user2357112这就是我正在学习的东西。我的简单测试表明面膜更快。我正在通过试图回答这个问题来实现你刚才所说的。 – piRSquared