我有一个多维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.]]
。
答案 0 :(得分:2)
这是你在找什么?
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
的元素成为列表,请在理解中进行转换:
good_data = [data[n,:][flag == 1].tolist() for n in range(data.shape[0])]
感谢Jaime指出,执行此操作的简单方法是:
good_data = data[:, data[0] == 1]