3
NumPy的的string
D型细胞似乎对应于Python的str
并因此的Python 2.x和3.x之间改变:ASCII字符串作为D型为字符串在Python numpy的阵列3
在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
?
我很确定回答你最后的问题是一个很大的问题。 AFAIK,而且我在一段时间以后再研究它,没有办法将小于8位的数据打包成小于1个字节。绝对不适用于6或7位类型,但除非您自己处理,否则在一个8位容器中不能有2个四位值。即使是'bool'数组,它们存储的每个“True”/“False”值都会占用全部8位。 – Jaime 2013-03-04 08:30:18
@Jaime哇,好吧。然后我想要1个字节:) – 2013-03-04 08:53:14