2017-05-06 5 views
-2

必要な違いです:numpyのINT16とIN32 DTYPE

b = np.arange(10, dtype = 'int16') 
print(b) #prints [0 1 2 3 4 5 6 7 8 9] 
a = b.view(dtype = 'int32') 
print(a) #prints [ 65536 196610 327684 458758 589832] #notice also the space before the first element 

誰かが 'INT32' にDTYPEを変換する際に グラムhappeninが何であるかを説明することができます。私はいつも 'int16'から 'int32'に割り当てられたビット数が変更されることを意味すると思っていますが、それはわかりません。

+0

なぜこの質問が評価されている-1? –

+0

おそらくこの質問はほとんど研究努力を示しておらず、言い方が悪いです。 – Eric

答えて

1

あなたが言うように、 10 int16ワードをint32個のワードとして印刷しようとすると発生します。各int32の単語は、2つのint16単語から作成されます。したがって、表示されるのは5 int32の単語だけになります。

さらに、32ビット整数のバイト順は、最初の16ビットワードがLSBビットになるようになっています。したがって、あなたの2つの最初の単語の16進表現を見てください。 16ビットの場合は、0x0000 = 00x0001 = 1です。同じビットが32ビットワードで使用されると、このやや直感的でないビット順序のために0x0001 0000 = 65536となります。

私はこれが概念の理解に役立つことを願っています。

+0

そして、配列 'a'の最初の要素の前にスペースがあります。これは、配列を表現する数値的方法と関係がある。上記のように、あるいは 'a = np.array([65536、196610、327684、458758、589832])'のように配列を作成しても問題ありません。 – JohanL

+0

ありがとうございます。どうしてスペース?私はこのようなdtype変更フローを作成する目的が何であるかを理解していません。 1つは16ビットずつずらして0で塗りつぶすと仮定します –

+0

あなたはすでにスペース部分に答えていました。 –

2

文献:numpyの中Array typesとa.view doc

ndarray.viewあたりとしては、(DTYPE = some_dtype)異なるデータ型を持つ配列のメモリのビューを構築します。これは、メモリのバイトの再解釈を引き起こす可能性があります。

  1. は、int32(32/16) = 2によって配列をマージするように、この配列を表示する0から9 [0 1 2 3 4 5 6 7 8 9]

    1.1に均等に離間配列を生成b = np.arange(10, dtype = 'int16')
    検討します。
    また、奇数長の配列に対してこの操作を実行しようとすると、エラーが発生します。 [ 65536 * 1 + 0, 65536 * 3 + 2, 65536 * 5 + 4, 65536 * 7 + 6, 65536 * 9 + 8]

  2. これは単にint16としてこのデータを表示する9

    2.1から0から等間隔の配列を作成np.arange(10)にequalivalentさb = np.arange(10, dtype = 'int32')
    検討:

    出力は、[ 65536 196610 327684 458758 589832]
    説明でありますデータの各要素を(32/16) = 2部分に分割します。
    したがって、a = b.view(dtype = 'int16')(32/8) = 4部分にint8分割データの各要素として、このデータを表示[0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0]

    2.2です。
    したがって、a = b.view(dtype = 'int8')[0 0 0 0 1 0 0 0 2 0 0 0 3 0 0 0 4 0 0 0 5 0 0 0 6 0 0 0 7 0 0 0 8 0 0 0 9 0 0 0]

+0

ありがとうございます。 1つの訂正はおそらく.. 2.2 32/8 = 4部分で意味しますか? –

+0

はい、ありがとうございます。私はそれを更新する;) –

+0

@ニチン、私はあなたの問題を解決した私の答えを願っています。あなたはいつも役に立つと思った答えを受け入れることができます。 –

関連する問題