ASCII字符串作为Python 3中字符串numpy数组的数据类型

2024-04-19 03:15:38 发布

您现在位置:Python中文网/ 问答频道 /正文

NumPy的string数据类型似乎与Python的str相对应,因此在Python 2.x和3.x之间变化:

在Python2.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

在Python3.3中:

In [2]: np.dtype((np.str_, 1)).itemsize
Out[2]: 4

在这两种情况下,NumPy的版本都是1.7.0。

我正在编写一些代码,我想在这两个Python版本上工作,我想要一个ASCII字符串数组(4倍的内存开销是不可接受的)。所以问题是:

  • 在Python 3中,如何为特定长度的ASCII字符串(每个字符1个字节)定义数据类型?
  • 如何在Python2中也能工作呢?
  • 另外一个问题是:我是否可以进一步限制字母表,例如ascii_uppercase,并为每个字符节省一点或两点?

我认为可能的答案是第一个问题的字符数组(即使用字符数组而不是字符串数组)。似乎我可以在构造项目时指定项目大小:

chararray(shape, itemsize=1, unicode=False, buffer=None, offset=0,
          strides=None, order=None)

更新:不,itemsize实际上是字符数。但仍然有unicode=False

这条路可以走吗?

它也能回答最后一个问题吗?

我该如何使用它作为dtype


Tags: 项目字符串in版本numpynonenpascii
1条回答
网友
1楼 · 发布于 2024-04-19 03:15:38

您可以使用'S'typestr

>>> np.array(['Hello', 'World'], dtype='S')
array([b'Hello', b'World'], 
      dtype='|S5')

同样在2.6/2.7中,str被别名为bytes(或np.bytes_):

>>> np.dtype((bytes, 1)) # 2.7
dtype('|S1')
>>> np.dtype((bytes, 1)) # 3.2
dtype('|S1')

支持b''文本:

>>> np.array([b'Hello', b'World']) # 2.7
array(['Hello', 'World'], 
      dtype='|S5')
>>> np.array([b'Hello', b'World']) # 3.2
array([b'Hello', b'World'], 
      dtype='|S5')

相关问题 更多 >