从U3 dtype转换为ascii

时间:2016-07-28 13:32:59

标签: python numpy unicode ascii

我正在从.mat文件中读取数据。数据以numpy数组的形式出现。

[array([u'ABT'], dtype='<U3')] 

这是数组的一个元素。我想从数组中只获得值'ABT'。 Unicode规范化和编码为ascii函数不起作用。

1 个答案:

答案 0 :(得分:0)

encode是一个字符串方法,因此不能直接在字符串数组上工作。但是有几种方法可以将它应用到每个字符串

这里我正在使用Py3,所以默认是unicode。

In [179]: A=np.array(['one','two'])
In [180]: A
Out[180]: 
array(['one', 'two'], 
      dtype='<U3')

普通迭代:

In [181]: np.array([s.encode() for s in A])
Out[181]: 
array([b'one', b'two'], 
      dtype='|S3')

np.char具有将字符串方法应用于数组的每个元素的函数:

In [182]: np.char.encode(A)
Out[182]: 
array([b'one', b'two'], 
      dtype='|S3')

但看起来这是astype可以处理的转换之一:

In [183]: A.astype('<S3')
Out[183]: 
array([b'one', b'two'], 
      dtype='|S3')

受最近关于np.chararray的问题的启发: What happened to numpy.chararray

In [191]: Ac=np.char.array(A)
In [192]: Ac
Out[192]: 
chararray(['one', 'two'], 
      dtype='<U3')
In [193]: Ac.encode()
Out[193]: 
array([b'one', b'two'], 
      dtype='|S3')