5

我有一个多维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

打印声明给了我[1., 1., 1.]

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

4

1 回答 1

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]
于 2013-10-24T20:29:21.163 回答