到目前为止,我的代码是:
import numpy as np
data=np.genfromtxt('filename')
print(data)
打印:
[[ 0.723 1. ]
[ 0.433 2. ]
[ 0.258 1. ]
[ 1.52 2. ]
[ 0.083 2. ]
[ 2.025 1. ]
[ 3.928 1. ]]
如何根据行是1还是2将数据分为两组?
答案 0 :(得分:1)
一种简单的解决方案是使用np.where
以数组元组的形式返回条件语句的结果,该条件语句可直接与numpy的高级切片符号一起使用,以将数据切片为新变量。 / p>
import numpy as np
data = np.array(
[[ 0.723, 1. ],
[ 0.433, 2. ],
[ 0.258, 1. ],
[ 1.52, 2. ],
[ 0.083, 2. ],
[ 2.025, 1. ],
[ 3.928, 1. ]])
data1 = data[np.where(data[:,1] == 1)]
data2 = data[np.where(data[:,1] == 2)]
print(data1)
print(data2)
答案 1 :(得分:0)
怎么样呢?
import numpy as np
data = np.asarray([[0.723, 1.],
[0.433, 2.],
[0.258, 1.],
[1.520, 2.],
[0.083, 2.],
[2.025, 1.],
[3.928, 1.]])
split_data = [data[data[:,1] == 1.], data[data[:,1] == 2.]]
print(f'data:\n{data}')
print(f'split_data:\n{split_data}')
说明:
data[:,1]
本身引用第二个“列”中的值。
输出:
data:
[[0.723 1. ]
[0.433 2. ]
[0.258 1. ]
[1.52 2. ]
[0.083 2. ]
[2.025 1. ]
[3.928 1. ]]
split_data:
[array([[0.723, 1. ],
[0.258, 1. ],
[2.025, 1. ],
[3.928, 1. ]]),
array([[0.433, 2. ],
[1.52 , 2. ],
[0.083, 2. ]])]
答案 2 :(得分:0)
您的问题很简短,因此我不太了解数据格式,但尝试使用以下方法复制它:
foo = [[ 0.723, 1 ], [ 0.433, 2 ], [ 0.258, 1 ], [ 1.52, 2 ],
[ 0.083, 2 ], [ 2.025, 1 ], [ 3.928, 1 ]]
如果要过滤此列表foo
以仅包含与特定数字匹配的数字,则可以使用以下列表理解:
foo_is_1 = [e for e in foo if e[1] == 1]
foo_is_2 = [e for e in foo if e[1] == 2]
print(foo_is_1)
print(foo_is_2)
如果您对第二个参数一无所知,而只想将列表拆分成具有唯一第二个参数的列表,则可以使用:
list_of_lists = [[e for e in foo if e[1] == a] for a in list(set([a[1] for a in foo]))]
for entry in list_of_lists:
print(entry)
基本上,这是两个列表推导,一个用于a
中每个唯一的第二个自变量e
,一个用于每个foo
中的条目{{1}}。