2015-12-16 3 views
6

NumPyとSciPyを初めて使用しました。 Matlabとは異なり、NumPyには各配列に関連付けられたデータ型があるようです。NumPyのastypeで有効なパラメータ

我々は整数配列xがあるとします。私はfloat型に配列を変換したい場合は、それは、次の作品のように思える

import numpy as np 
x = np.array([1, 2, 3]) 

y1 = x.astype('float64') # Works! 
y2 = x.astype('float_') # Works! 
y3 = x.astype('float') # Works! 

しかし、私は多少よ次のものが一重引用符なしで動作することを見て困惑しました。

y4 = x.astype(float)  # Still works!! 

しかし、私は単一引用符を省略した場合Y1とY2のために使用される他の表現のために、それは動作しません:

y5 = x.astype(float64) # Doesn't work. 
y6 = x.astype(float_) # Doesn't work. 

だから、私はなぜY4作品について多少混乱しています、 y5とy6はエラーの原因となります。誰かが私にこのことを教えてもらえますか?

+0

私はMatlabを使用していませんが、ドキュメントで判断すると(http://www.mathworks.com/help/matlab/numeric-types.html)、Matlabの配列にもdtypesがあるようです。それらは常に倍精度浮動小数点にデフォルト設定されています。 – user2357112

答えて

5

他の式が機能する場合は、numpyから型をインポートするだけで済みます。 floatのためにこれを行う必要はありません。Pythonの組み込み型であるからです。

y5 = x.astype(np.float64) 
y6 = x.astype(np.float_) 

文字列型と型の型入力はndarray.dtype属性を使用しているとき、あなたが見るものである、内部numpy.dtypeオブジェクトに変換されている両方。 astypeのドキュメントを読ん

1

dtype : str or dtype 
    Typecode or data-type to which the array is cast. 

あなたは、あなたがDTYPEを使用している、引用符なしfloatを使用しています。 "float"を使用している場合は、strを使用しています。

float64およびfloat_は、Pythonではdtypeではありません。ワークスペースでは、ありませんので

2

これらの2が動作しない、それらの名前を持つ変数は:

y5 = x.astype(float64) # Doesn't work. 
y6 = x.astype(float_) # Doesn't work. 

私はNameError: name 'float64' is not definedを取得します。エラーは、何かがx.astypeメソッドに渡される前に、Pythonインタプリタによって生成されます。

対話インタプリタでfloat64と入力しただけで同じエラーが発生します。

np.float64は、np名前空間にこのような変数があるために機能します。それは実際にはnumpyクラスです。

floatでも動作します。これもクラス、つまりPythonの基本クラスです(関数としても使用でき、文字列や数値をfloatオブジェクトに変換することもできます)。

'float64'は文字列であり、astypeはおそらくテーブルで何かを調べることで理解できます。 (私はそれを見ることができた)。一方

私はastype何かランダムな文字列を与える場合、私は

In [967]: A.astype('bar') 
... 
TypeError: data type "bar" not understood 

np.dtype('bar')別のエラーを取得するには、同じエラーを与えます。

np.dtype(float) 
np.dtype('float64') 
np.dtype('float') 

すべてが同じdtype('float64')オブジェクトを返します。

関連する問題