1

次のような1次元のnumpy配列から最小値を見つけようとしています:

col = array(['6.7', '0.9', '1.3', '4', '1.8'],dtype='|S7'), 

を使用してcol.min()いますが、これは機能していません。

NumPyで提案されているように試してみました: 数値ビュー関数のレコード配列から最小/最大を取得すると、「S7」が有効なフィールドとして認識されませんでした。

この問題に対処する最善の方法は何ですか? 値を読み取るとき、または min 関数を使用するときに、データ型を指定する必要がありましたか?

4

3 に答える 3

4

問題は、数値の配列ではなく、文字列の配列があることです。したがって、最初に配列を適切な型に変換する必要があります。

In [38]: col.astype(np.float64).min()
Out[38]: 0.90000000000000002

値の読み取り中または min 関数の使用中にデータ型を指定する必要がありましたか?

入力が数値であることがわかっている場合は、データを読み取るときにデータ型を指定するのが理にかなっています。

于 2013-01-30T19:05:32.567 に答える
2

別の方法は、キーワードminと組み合わせてpython 組み込み関数を使用することです。key

>>> import numpy as np
>>> col = np.asarray(['6.7', '0.9', '1.3', '4', '1.8'])
>>> min(col,key=float)
'0.9'
于 2013-01-30T19:18:44.123 に答える
0

他の多くの数値演算を行う必要がなく、データをstrフォーマットで保持することを好む理由がある場合は、いつでもネイティブの Pythonminmax使用して、プレーンなlistデータを操作できます。

In [98]: col = np.asarray(['6.7', '0.9', '1.3', '4', '1.8'])

In [99]: col
Out[99]:
array(['6.7', '0.9', '1.3', '4', '1.8'],
      dtype='|S3')

In [100]: col.min()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-100-1ce0c6ec1def> in <module>()
----> 1 col.min()

TypeError: cannot perform reduce with flexible type

In [101]: col.tolist()
Out[101]: ['6.7', '0.9', '1.3', '4', '1.8']

In [102]: min(col.tolist())
Out[102]: '0.9'

In [103]: max(col.tolist())
Out[103]: '6.7'

一般に、これは数値データを処理するのに適した方法ではなく、配列の内容に関する多くの誤った仮定の影響を受けやすい可能性があります。ただし、文字列を操作する必要がある場合、または文字列を操作する特別な理由がある場合 (最小値と最大値のみを計算し、それらを表示するだけであるなど) を検討するための別のオプションにすぎません。

于 2013-01-30T19:13:42.960 に答える