Измените тип данных индекса в числовой матрице с int на строку - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь вставить строку в целочисленную матрицу в матрице 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 ]

1 голос
/ 05 июля 2019

Вам нужно установить 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)

Sidenote: numpy массивы не должны быть множественными типами, и это, вероятно,быть неэффективным

0 голосов
/ 06 июля 2019

Сделайте ваш c (более простой способ):

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

Попытка присвоить строку целочисленному типу d приводит к ошибке - она ​​не может преобразовать строку в целое число:

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 не работает на месте:

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:

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

Теперь мы можем присвоить новое строковое значение:

In [383]: c1[0,2] = 'S'                                                                                         
In [384]: c1                                                                                                    
Out[384]: 
array([['0', '0', 'S'],
       ['0', '0', '0'],
       ['0', '0', '0']], dtype='<U21')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...