2016-06-12 9 views
1

次のコードでは、既存の配列の形から新しい要素のデータ型を使用して新しいnumpy配列を作成すると予想していました。オリジナルの配列は8ビットRGBピクセルの画像です。私は同じ形状を使用してuint16データ型で新しい配列を作成したい。その目的は、画像を16ビットピクセルに変換し、数学を実行することです。私の驚いたことに、以下はうまくいきませんでした。変更された要素データ型の新しいnumpy配列の作成

>>> import scipy.misc  as msc 
>>> import numpy    as np 
>>> img_rgb = msc.imread('Jupiter_20160417_53.png') 
>>> img_rgb.dtype 
dtype('uint8') 
>>> img_rgb.shape 
(480, 640, 3) 
>>> new= np.zeros(img_rgb.shape,dtype=uint16) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'uint16' is not defined 

私は何を欠席しましたか?

おかげで、 ゲルト

+0

>>> =のnp.zeros((3,3)、DTYPE = np.uint16)私にとって(もちろんNPとして輸入numpyのを)作品 –

答えて

1

np.

In [2]: np.zeros((3,4),dtype=np.uint16) 
Out[2]: 
array([[0, 0, 0, 0], 
     [0, 0, 0, 0], 
     [0, 0, 0, 0]], dtype=uint16) 

'uint16'は(文字列)としても働いているだろう。

intおよびfloatはPythonの名前です。ほとんどの場合、dtypesnumpy固有であり、np.名前空間または文字列名(numpyが理解する)のいずれかを必要とします。

エラーNameError: name 'uint16' is not definedは、uint16がメイン名前空間の変数ではないことを意味します。言い換えれば、それは組み込み変数(または関数)ではなく、そのようにインポートされていません。これは、名前空間の一部であり、npをインポートしたものです。

In [8]: z 
... 
NameError: name 'z' is not defined 
+0

hpauljありがとうございます。 'np。'接頭辞は働いた。より良いコードスタイルは何ですか? np.zeros((3,4)、dtype = 'uint16')またはnp.zeros((3,4)、dtype = np.uint16)? –

+0

私はそれが重要だとは思わない。詳細はこちら:http://docs.scipy.org/doc/numpy-1.10.0/reference/arrays.scalars.html – hpaulj

関連する問題