嵌套使用numpy.where

时间:2014-07-01 19:33:56

标签: python numpy

我将数据存储在三个不同的数组中:A,B和C. 我还有一个整数数组Z,其中包含1,2或3 A,B,C和Z具有相同的形状 我想创建一个新数组D,它包含A中列出的值,如果Z中的对应元素是1,如果Z中的对应元素是2,则列出的值是B中列出的值,如果相应的元素是Z是3.

为此,我编写了嵌套版本的numpy.where代码。然而,代码看起来很难看。还有更好的方法吗?

import numpy as np
#Create arrays that hold the data
A = np.array([1.,1.,1.])
B = A * 2
C = A * 3
#Create an array that hold the zone numbers
Z = np.array([1,2,3])
#Now calculate the new array by figuring out the appropriate zone at each location
D = np.where(Z==1,A,np.where(Z==2,B, np.where(Z==3,C,0.0)))
#Output
print A
print B
print C
print D

[ 1.  1.  1.]
[ 2.  2.  2.]
[ 3.  3.  3.]
[ 1.  2.  3.]

1 个答案:

答案 0 :(得分:1)

看看是否有效:

new=np.zeros_like(A)
new[Z==1] = A[Z == 1]
new[Z==2] = B[Z == 2]
new[Z==3] = C[Z == 3]