如何按值分割数组

时间:2019-02-14 14:27:13

标签: python numpy

到目前为止,我的代码是:

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将数据分为两组?

3 个答案:

答案 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}}。