元素比较,matlab与python numpy

时间:2018-04-18 17:21:25

标签: python matlab numpy elementwise-operations

我是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()”

谢谢

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

2 个答案:

答案 0 :(得分:2)

这与Matlab中的numpy几乎相同:

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正是您所期望的。所有基本操作 - 算术,比较等 - 都是元素方面的,如快速入门教程的Basic Operations部分所述。所以这会返回一个布尔数组,其中每个元素都是TrueFalse,具体取决于rad的对应元素是否为>=50

Python使用方括号进行数组索引,如快速入门教程的Indexing, Slicing and Iterating部分所述。所以numpy也使用方括号来选择一个布尔数组,如快速入门教程的Indexing with Boolean Arrays部分所述。

答案 1 :(得分:0)

最后我在这里找到了它:Numpy array, how to select indices satisfying multiple conditions?

我不得不更换"和"用"&"并添加括号:

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