按条件提取numpy数组中的特定列

时间:2019-04-04 07:21:21

标签: python python-3.x numpy numpy-ndarray

我有一个作业,通过按条件(而不是按范围)选择特定的列来从另一个2维np数组中提取2维numpy数组。

所以我有一个形状为A的数组(3, 50000)。我正在尝试为(3, x) A x < 50000 with the original columns of-0.4 that satisfy the third cell in the column is的新数组。

例如,如果:

A = [[1,2,3],[2,0.5,0],[9,-2,-0.2],[0,0,0.5]]

我希望回来:

B = [[2,0.5,0],[9,-2,-0.2]

我试图制作一个布尔1秩数组,该数组在我想要的列上以及在两者之间如何组合时都适用。它输出的问题是1级数组,这不是我想要的。而且我遇到了一些ValueErrors ..

bool_idx = (-0.4 < x_y_z[2] < 0.1)

此代码带来了一些麻烦:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我可以通过一些循环来完成它,但是NumPy有很多漂亮的功能,我敢肯定我在这里错过了一些东西。

1 个答案:

答案 0 :(得分:2)

在Python中,表达式-0.4 < x_y_z[2] < 0.1大致等效于-0.4 < x_y_z[2] and x_y_z[2] < 0.1and运算符通过将表达式的每个部分转换为布尔值来确定其真值。与Python列表和元组不同,numpy数组不支持转换。

指定条件的正确方法是按位&(这是明确且非短路的),而不是隐式and(在这种情况下,这是短路且是不明确的) :

condition = ((x_y_z[2, :] > - 0.4) & (x_y_z[2, :] < 0.1))

condition是一个布尔掩码,用于选择所需的列。您可以选择带有简单切片的行:

selection = x_y_z[:, condition]