Python 使用条件拆分多维numpy数组

Python 使用条件拆分多维numpy数组,python,numpy,Python,Numpy,我有一个多维numpy数组。 第一个数组指示数据的质量。0是好的,1不是那么好。 对于第一次检查,我只想使用好的数据。 如何将阵列拆分为两个新阵列? 我自己的想法行不通: good_data = [x for x in data[0,:] if x = 1.0] bad_data = [x for x in data[0,:] if x = 0.0] 下面是一个小例子,说明了我的问题: import numpy as np flag = np.array([0., 0., 0., 1., 1

我有一个多维
numpy
数组。 第一个数组指示数据的质量。0是好的,1不是那么好。 对于第一次检查,我只想使用好的数据。 如何将阵列拆分为两个新阵列? 我自己的想法行不通:

good_data = [x for x in data[0,:] if x = 1.0]
bad_data = [x for x in data[0,:] if x = 0.0]
下面是一个小例子,说明了我的问题:

import numpy as np

flag = np.array([0., 0., 0., 1., 1., 1.])
temp = np.array([300., 310., 320., 300., 222., 333.])
pressure = np.array([1013., 1013., 1013., 900., 900., 900.])
data = np.array([flag, temp, pressure])

good_data = data[0,:][data[0,:] == 1.0]
bad_data  = data[0,:][data[0,:] == 0.0]

print good_data
print语句给了我
[1,1,1.]


但是我在找
[[1,1,1.],[300,222,333.],[900,900,900.]

这就是你要找的吗

good_data = data[0,:][data[0,:] == 1.0]
bad_data  = data[0,:][data[0,:] == 0.0]
这将返回一个
numpy.array

或者,您可以按照建议执行操作,但将结果列表转换为
numpy.array

good_data = np.array([x for x in data[0,:] if x == 1.0])
请注意,比较运算符取代赋值运算符
=

对于您的特定示例,在迭代第一个索引时,使用
flag==1
对数据子集:

good_data = [data[n,:][flag == 1] for n in range(data.shape[0])]
如果您确实希望
好数据的元素成为列表,请在理解中转换:

good_data = [data[n,:][flag == 1].tolist() for n in range(data.shape[0])]
感谢Jaime,他指出实现这一点的简单方法是:

good_data = data[:, data[0] == 1]

谢谢你的帮助。不幸的是,这不是我真正想要的。我将尝试详细说明我的问题,请参见上文。这是一个想法,但你把事情复杂化了,OP需要的实际上是
data[:,data[0]==1]
data[:,data[0]==0]
。好的,请查看我答案的更新。