-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() を使用してください」

ありがとうございました

更新: 間違いを犯して申し訳ありません: この最初の質問の扱い方は知っていましたが、2 番目の条件を追加するのを完全に忘れていました。問題は、2 つ以上の比較を行いたい場合に発生します。

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ます。Falserad>=50

Python は、クイックスタート チュートリアルのインデックス作成、スライス、および反復セクションで説明されているように、角かっこを使用して配列のインデックス作成を行います。そのため、クイックスタート チュートリアルの「ブール配列によるインデックス作成」セクションで説明されているように、numpy はブール配列での選択にも角かっこを使用します。

于 2018-04-18T17:27:29.997 に答える