我是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()”
谢谢
更新:对不起,我犯了一个错误:我知道如何处理这个问题,但我完全忘了添加第二个条件。当我想要进行两次或更多次比较时,问题出现了。
答案 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部分所述。所以这会返回一个布尔数组,其中每个元素都是True
或False
,具体取决于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)]