web-dev-qa-db-ja.com

バイト配列をnumpy配列に戻す

.tobytes()関数を使用して、numpy配列をバイトに変換できます。

このバイト配列からnumpy配列にデコードするにはどうすればよいですか?形状(28,28)の配列iに対してこのように試しました

>>k=i.tobytes()

>>np.frombuffer(k)==i

False

uint8でも試してみました。

11

あなたがやっていることに関するいくつかの問題:

  1. frombufferは、入力を常に1次元配列として解釈します。 documentation の最初の行です。したがって、(28, 28)になるように形状を変更する必要があります。

  2. デフォルトのdtypefloatです。したがって、フロートをシリアライズしなかった場合は、dtypeを手動で指定する必要があります(先験的には、バイトストリームの意味を誰も知ることができません:それらが表すものを言う必要があります)。

  3. 配列が等しいことを確認したい場合は、np.array_equalを使用する必要があります。 ==を使用すると、要素ごとの操作が行われ、boolsのnumpy配列が返されます(これはおそらく望みのものではないでしょう)。

このバイト配列からnumpy配列にデコードするにはどうすればよいですか?

例:

In [3]: i = np.arange(28*28).reshape(28, 28)

In [4]: k = i.tobytes()

In [5]: y = np.frombuffer(k, dtype=i.dtype)

In [6]: y.shape
Out[6]: (784,)

In [7]: np.array_equal(y.reshape(28, 28), i)
Out[7]: True

HTH。

11