Numpy Zeros和String数据类型

时间:2017-12-06 03:56:56

标签: python arrays numpy

我有一个18x18网格的Numpy Zeros,我有1和2并且使用下面的代码随机填充棋盘。

import numpy as np
a=np.zeros(324)
p=np.random.permutation(324)
a[p[:30]]=1
a[p[30:60]]=2
a.reshape(18,18)

它返回正确的numpy数组。但是,我想在那里添加一个随机X,所以我将上面代码的第一行更改为

a=np.zeros(324,dtype=str)

但是,当我运行代码时,数组中的所有零都会消失。它只显示为' _'(没有下划线)。有什么想法能够在数组中有字符串,但也有零?

或者更好的方法来创建一个可以包含字符串的18x18网格?

1 个答案:

答案 0 :(得分:3)

A'零' dtype=str为空白,而不是0'0'

In [1]: a = np.zeros((3,3))
In [2]: a
Out[2]: 
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])
In [3]: a = np.zeros((3,3),int)
In [4]: a
Out[4]: 
array([[0, 0, 0],
       [0, 0, 0],
       [0, 0, 0]])
In [5]: a = np.zeros((3,3),bool)
In [6]: a
Out[6]: 
array([[False, False, False],
       [False, False, False],
       [False, False, False]], dtype=bool)
In [7]: a = np.zeros((3,3),str)
In [8]: a
Out[8]: 
array([['', '', ''],
       ['', '', ''],
       ['', '', '']],
      dtype='<U1')

通常最好同时指定字符串长度,但仍然会出现空白:

In [9]: a = np.zeros((3,3),'U4')
In [10]: a
Out[10]: 
array([['', '', ''],
       ['', '', ''],
       ['', '', '']],
      dtype='<U4')

您可以将整数数组转换为字符串,并添加其他字符串值:

In [11]: a = np.zeros((3,3),int)
In [12]: a[[0,1,2],[2,0,1]] = [1,2,3]
In [13]: a
Out[13]: 
array([[0, 0, 1],
       [2, 0, 0],
       [0, 3, 0]])
In [14]: A = a.astype(str)
In [15]: A
Out[15]: 
array([['0', '0', '1'],
       ['2', '0', '0'],
       ['0', '3', '0']],
      dtype='<U11')
In [16]: A[[0,1,2],[0,1,2]] = 'X'
In [17]: A
Out[17]: 
array([['X', '0', '1'],
       ['2', 'X', '0'],
       ['0', '3', 'X']],
      dtype='<U11')

原始0 s变为字符串'0'