NumPyのstring
dtypeはPythonのdtypeに対応しているようで、Python2.xstr
と3.xの間で変更されます。
Python 2.7の場合:
In [1]: import numpy as np
In [2]: np.dtype((np.str_, 1)).itemsize
Out[2]: 1
In [3]: np.dtype((np.unicode_, 1)).itemsize
Out[3]: 4
Python 3.3の場合:
In [2]: np.dtype((np.str_, 1)).itemsize
Out[2]: 4
どちらの場合も、NumPyのバージョンは1.7.0です。
両方のPythonバージョンで動作させたいコードを書いていますが、ASCII文字列の配列が必要です(4倍のメモリオーバーヘッドは許容されません)。したがって、質問は次のとおりです。
- Python 3で特定の長さ(1文字あたり1バイト)のASCII文字列のdtypeを定義するにはどうすればよいですか?
- Python 2でも機能する方法でそれを行うにはどうすればよいですか?
- ボーナスの質問:アルファベットをさらに制限して、たとえば、
ascii_uppercase
文字ごとに1〜2ビット節約できますか?
私が潜在的な答えとして見ているものは、最初の質問の文字配列です(つまり、文字列の配列ではなく文字配列の配列があります)。アイテムを作成するときにアイテムのサイズを指定できるようです。
chararray(shape, itemsize=1, unicode=False, buffer=None, offset=0,
strides=None, order=None)
更新:いや、これitemsize
は実際には文字数です。しかし、まだありunicode=False
ます。
それは行く方法ですか?
最後の質問にも答えますか?
そして、実際にそれをどのように使用しdtype
ますか?