将numpy矩阵中的索引数据类型从int更改为string

2024-04-20 10:25:49 发布

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

我试图在numpy矩阵中插入一个字符串到一个基于整数的矩阵中。我想知道他们是否是一种改变我想要存储字符串的索引的数据类型的方法?在

我尝试过使用.astype()函数,但没有成功。 这就是我一直在努力做的

c = np.array([0])
c.resize((3,3))
c.fill(0)
c.astype(str)
c.itemset(2, 0, 'S')
This is what I am trying to have my output look like:    

     OutPut:
    [[0 0 S]
    [0 0 0]
    [0 0 0]]

Tags: 方法函数字符串numpynp矩阵整数this
2条回答

您需要将dtype设置为object,以便在一个数组中允许多种数据类型:

c = np.array([0])
c.resize((3,3))
c.fill(0)
c = c.astype('O')
c.itemset(2, 0, 'S')
c
>> array([[0, 0, 0],
       [0, 0, 0],
       ['S', 0, 0]], dtype=object)

旁注:numpy数组并不意味着是多类型的,这很可能表现不佳

{Make your way}(使你的方法更简单):

In [377]: c = np.zeros((3,3), int)                                                                              
In [378]: c                                                                                                     
Out[378]: 
array([[0, 0, 0],
       [0, 0, 0],
       [0, 0, 0]])

尝试将字符串分配给整数数据类型会导致错误-无法将字符串转换为整数:

^{pr2}$

astype无法正常工作:

In [380]: c.astype(str)                                                                                         
Out[380]: 
array([['0', '0', '0'],
       ['0', '0', '0'],
       ['0', '0', '0']], dtype='<U21')
In [381]: c                                                                                                     
Out[381]: 
array([[0, 0, 0],
       [0, 0, 0],
       [0, 0, 0]])

使用字符串dtype生成新数组:

^{4}$

现在我们可以指定新的字符串值:

In [383]: c1[0,2] = 'S'                                                                                         
In [384]: c1                                                                                                    
Out[384]: 
array([['0', '0', 'S'],
       ['0', '0', '0'],
       ['0', '0', '0']], dtype='<U21')

相关问题 更多 >