NumPy 的string
dtype 似乎与 Python 对应str
,因此在 Python 2.x 和 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 字符串数组(4x 内存开销是不可接受的)。所以问题是:
- 如何在 Python 3 中为特定长度的 ASCII 字符串(每个字符 1 个字节)定义 dtype?
- 我如何以在 Python 2 中也适用的方式来做到这一点?
- 额外的问题:我可以进一步限制字母表,例如
ascii_uppercase
,并为每个字符节省一点或两个吗?
我认为可能的答案是第一个问题的字符数组(即有一个字符数组而不是字符串数组)。好像我可以在构造一个时指定项目大小:
chararray(shape, itemsize=1, unicode=False, buffer=None, offset=0,
strides=None, order=None)
更新:不,itemsize
实际上是字符数。但还是有的unicode=False
。
这是要走的路吗?
它也会回答最后一个问题吗?
我如何实际使用它dtype
?