我正在尝试从2D numpy数组中选择一行。该选择基于行列中值的条件。
作为示例,这是我的2D数组:
| V1 | V2 | V3 | V4 | Q1 | Q2 |
|-----|-----|----|-----|----|-----|
| 0.1 | 0.5 | 3 | 7 | 5 | 10 |
| 0.3 | 0.8 | 4 | 5 | 15 | 20 |
| 2 | 15 | 6 | 0.5 | 1 | 0.5 |
该表可能有大约5000行或更多行,如果我具有所有V1,V2,V3,V4的值,我想在此数组中查找并找到Q1和Q2。
所以,如果我有
V1 = 0.3
V2 = 0.8
V3 = 4
v4 = 5
我希望它返回整行或仅返回Q值:
Q1 = 15
Q2 = 20
有什么方法可以在行上选择此数据? 我在网上找到了一个解决方案:
np.where((table[:,0] == V1) & (table[:,1] == V2) & (table[:,2] == V3) & (table[:,3] == V4))
但是有这么多条目需要花费相当长的时间,反正还有做得更快吗?
答案 0 :(得分:0)
为什么不将其转换为Pandas数据框?然后我们有以下内容:
import pandas as pd
ddict = {
'V1':[0.1,0.3,2],
'V2':[0.5,0.8,15],
'V3':[3,4,6],
'V4':[7,5,0.5,],
'Q1':[5,15,1],
'Q2':[10,20,0.5],
}
df = pd.DataFrame(ddict)
### DataFrame.loc(<row>, <column>) will return values for the columns if the row conditions are met.
df.loc[(df['V1'] == 0.3) & (df['V2'] == 0.8) & (df['V3'] == 4) & (df['V4'] == 5), ['Q1','Q2']]
输出:
Q1 Q2
1 15 20.0
答案 1 :(得分:0)
您可以执行以下操作:
import numpy as np
table = np.array([[ 0.1 , 0.5 , 3 , 7 , 5 , 10 ],
[ 0.3 , 0.8 , 4 , 5 , 15 , 20 ],
[ 2 , 15 , 6 , 0.5 , 1 , 0.5 ]])
np.where(np.all(np.equal(a[:,:4], [0.3, 0.8, 4, 5]),axis=1))
这将为您提供要查找的行号。您可以将其分配给row
之类的变量,然后只需使用a[row,-2:]
获取Q1 / Q2数据。
我建议注释掉每一层的括号,以弄清楚它是如何工作的,但是总之,您要查看数组中的列:4
(即0-3),以便找出匹配的列说明。您只分解所需的列,然后检查是否有任何列等于您要查找的结果,然后将它们“全部”排列在各行中(axis=1
),然后显示where
行中包含所有元素都等于true。