Python 是否有方法在2D numpy数组中选择一行,并为该行中的每一列设置条件?

Python 是否有方法在2D numpy数组中选择一行,并为该行中的每一列设置条件?,python,arrays,numpy,multidimensional-array,indexing,Python,Arrays,Numpy,Multidimensional Array,Indexing,我正在尝试从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行或更多行,如果我

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

但是,有这么多条目需要花费相当长的时间,是否还有更快的方法呢?

为什么不将其转换为数据帧呢?那么我们有以下几点:

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']]

为什么不把它转换成一个数据帧呢?那么我们有以下几点:

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']]
您可以通过以下方式完成:

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://code>获取Q1/Q2数据

我建议注释每个层中的参数,以了解其工作原理,但简而言之,您要查看数组中的列
:4
(即0-3),以找到与描述匹配的列。您只需分解所需的列,然后检查其中是否有任何列与您所查找的结果相等,然后在行中“全部”这些列(
axis=1
),然后显示
,其中
行的所有元素均等于true。

您可以使用以下方法执行此操作:

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://code>获取Q1/Q2数据


我建议注释每个层中的参数,以了解其工作原理,但简而言之,您要查看数组中的列
:4
(即0-3),以找到与描述匹配的列。您只需分解所需的列,然后检查其中是否有任何列与您所搜索的结果相等,然后将它们“全部”放到行中(
axis=1
),然后显示
,其中
行的所有元素都等于true。

您提到的条件是这样的
V1=0.3 V2=0.8 V3=4 v4=5
。当您选择多个行或根据不同的条件选择不同的行时,情况是否相同?是的,条件会发生变化,搜索将始终不同您提到的条件是这样的
V1=0.3 V2=0.8 V3=4 v4=5
。选择多行或根据不同条件选择不同行时是否相同?是的,条件将更改,搜索将始终不同