-4

我是 Matlab 用户,正在学习 Python。我想创建具有元素比较的新数组。使用 Matlab:在示例中,我有太阳辐射、温度和相对湿度:

rad=[0,0,0,0,0,12,55,95,50,12,60,12,5,0,0,0];
rhu=[90,91,95,94,93,90,88,89,85,83,81,80,80,85,90,92];
tmp=[3,5,6,9,8,9,10,11,13,15,14,13,11,9,8,8];

现在我想得到一个新数组,其中包含对应于大于 50 的太阳辐射和大于 87 的相对湿度的温度。我这样做:

tmp_rad=tmp(rad>50 & rhu>87)

在 python 中,如果我输入:

rad=np.array([0,0,0,0,0,12,55,95,50,12,60,12,5,0,0,0])
rhu=np.array([90,91,95,94,93,90,88,89,85,83,81,80,80,85,90,92])
tmp=np.array([3,5,6,9,8,9,10,11,13,15,14,13,11,9,8,8])
tmp_rad=tmp[rad>50 and rhu>87]

我收到以下错误“ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()”

谢谢

更新:对不起,我犯了一个错误:我知道如何处理这个问题,但我完全忘记添加第二个条件。当我想要进行两个或更多比较时,问题就来了。

4

2 回答 2

2

这在 numpy 中与在 Matlab 中几乎相同:

rad=np.array([0,0,0,0,0,12,55,95,50,12,60,12,5,0,0,0])
tmp=np.array([3,5,6,9,8,9,10,11,13,15,14,13,11,9,8,8])
tmp_rad=tmp[rad>=50]

rad>=50意味着您所期望的。所有基本运算(算术、比较等)都是按元素计算的,如快速入门教程的基本运算部分所述。所以这会返回一个布尔数组,其中每个元素要么是要么True取决于False对应的元素是否rad>=50

Python 使用方括号进行数组索引,如快速入门教程的索引、切片和迭代部分所述。因此,numpy 还使用方括号来选择布尔数组,如快速入门教程的使用布尔数组索引部分所述。

于 2018-04-18T17:27:29.997 回答
1

最后我在这里找到了它:Numpy 数组,如何选择满足多个条件的索引?

我不得不用“&”替换“and”并添加括号:

tmp_rad=tmp[(rad>50)&(rhu>87)]
于 2018-04-22T07:56:06.180 回答