我有一个作业,通过按条件(而不是按范围)选择特定的列来从另一个2维np数组中提取2维numpy数组。
所以我有一个形状为A
的数组(3, 50000)
。我正在尝试为(3, x)
A x < 50000 with the original columns of
-0.4
例如,如果:
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有很多漂亮的功能,我敢肯定我在这里错过了一些东西。
答案 0 :(得分:2)
在Python中,表达式-0.4 < x_y_z[2] < 0.1
大致等效于-0.4 < x_y_z[2] and x_y_z[2] < 0.1
。 and
运算符通过将表达式的每个部分转换为布尔值来确定其真值。与Python列表和元组不同,numpy数组不支持转换。
指定条件的正确方法是按位&
(这是明确且非短路的),而不是隐式and
(在这种情况下,这是短路且是不明确的) :
condition = ((x_y_z[2, :] > - 0.4) & (x_y_z[2, :] < 0.1))
condition
是一个布尔掩码,用于选择所需的列。您可以选择带有简单切片的行:
selection = x_y_z[:, condition]