0

同じ長さのリストが 2 つあります。

Offset = [-0.0002, -0.0004, -0.0004, -0.006, -0.0006, -0.0006, -0.0066, -0.0007, -0.0007, -0.0008]

Ratio = [0.0641, 0.152, 0.254, 0.246,  0.3197,  0.3249, 2.8795,  0.4286,  0.5191, 0.5712]

私がやりたいことは、 Ratio の対応する要素が 未満であるという条件で、要素が Offset に由来するリストを作成することです2.5。したがって、上記の 2 つのリストでは、Ratio の 6 番目の要素が より大きいため2.5、Offset の 6 番目の要素を削除して、他のすべての要素を返したいと考えています。

リストの理解を試みましたが、私の試みは次のとおりです。

Data = [x for n in Ratio[n] for x in Offset if Ratio[n] < 2.5]

ただし、これにより「numpy.float64' object is not iterable」というエラーが生成されます。 この質問を読むと、エラーが発生する理由がわかりますが、リストの理解を機能させる方法がわかりません。

この for ループは正しい軌道に乗っているようですが、a) 私はリスト内包表記を好むし、b) リストを反復しながらリスト内の要素を削除することはできないと思います。

for n in range(len(Ratio)):

  if Ratio[n] < 2.5:
    #Keep the element Offset[n]
  else:
    #Delete the element Offset[n]
4

3 に答える 3

4

これにより、求めるリストが生成されます。重要なのは、対応する要素を持つリストがある場合に使用することですzip(または必要に応じて)。izip

[offset for offset, ratio in zip(Offset, Ratio) if ratio < 2.5]
于 2013-09-04T17:11:41.090 に答える
4

エラーメッセージから聞こえる

 'numpy.float64' object is not iterable'

それRatioはnumpy配列です。Offsetとの両方Ratioが NumPy 配列である場合、必要な配列を作成できます

Offset[Ratio < 2.5]

例えば:

In [1]: import numpy as np

In [2]: Ratio = np.array([0.0641, 0.152, 0.254, 0.246,  0.3197,  0.3249, 2.8795,  0.4286,  0.5191, 0.5712])

In [3]: Offset = np.array([-0.0002, -0.0004, -0.0004, -0.006, -0.0006, -0.0006, -0.0066, -0.0007, -0.0007, -0.0008])

In [7]: Offset[Ratio < 2.5]
Out[7]: 
array([-0.0002, -0.0004, -0.0004, -0.006 , -0.0006, -0.0006, -0.0007,
       -0.0007, -0.0008])
于 2013-09-04T17:22:47.183 に答える