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

Extracting specific columns in numpy array by condition

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

所以我有一个数组 A,形状为 (3, 50000)。我正在尝试为某些 x < 50000 with the original columns ofAthat satisfy the third cell in the column is-0.4 < z < 0.1`.

获取形状为 (3, x) 的新数组

例如如果:

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]

我试图制作一个 bool 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 有很多漂亮的函数,我确定我在这里遗漏了一些东西..

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

指定条件的正确方法是按位 &(明确且非短路),而不是隐式 and(短路且不明确)案例):

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

condition 是一个布尔掩码,select 是您想要的列。您可以 select 使用简单切片的行:

selection = x_y_z[:, condition]