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

时间:2019-07-05 18:59:29

标签: python numpy matrix

我正在尝试将一个字符串插入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]]

2 个答案:

答案 0 :(得分:1)

您需要将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数组并不意味着是多个类型,这可能表现不佳

答案 1 :(得分:0)

(更简单的方法)制作您的.side-anchor { pointer-events: none; } .side-svg { pointer-events: none; }

c

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

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

In [379]: c[0,2] = 'S' --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-379-d41cf66ff6a1> in <module> ----> 1 c[0,2] = 'S' ValueError: invalid literal for int() with base 10: 'S' 不能就地工作:

astype

使用字符串dtype创建新数组:

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]])

现在我们可以分配新的字符串值:

In [382]: c1 = c.astype(str)