繁体   English   中英

有没有一种方法可以在2D numpy数组中选择一行,且该行中的每一列都有条件?

[英]Is there a way to select a row in an 2D numpy array with conditions for each column in the row?

我正在尝试从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))

但是有这么多条目需要花费相当长的时间,是否有做得更快?

为什么不将其转换为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

您可以执行以下操作:

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的行具有等于真正的所有元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM