Numpy вставка строк в массив - PullRequest
1 голос
/ 30 апреля 2020

Я пытаюсь создать numpy массив строк. Сначала я начинаю с пустого массива, который затем заполняю строками, поскольку они генерируются в for-l oop.

strings = np.empty(size, np.unicode_)

for i in range (size):
    strings[i] = ("Name" + str(i))

Однако, похоже, что он берет только первую букву строки и вставляет ее:

output: ['N' 'N' 'N' 'N' 'N' 'N' 'N' 'N' 'N' 'N']

Что я делаю не так и как мне правильно это делать?

Ответы [ 3 ]

0 голосов
/ 30 апреля 2020

Вы можете использовать np.chararray и установить максимальный размер элемента. Затем можно вычислить размер элементов, используя 10-й журнал. Вот образец:

import math
size = 11

item_maxsize = 4 + math.ceil(math.log10(size)) 
strings = np.chararray(size, itemsize = item_maxsize, unicode = True)

for i in range (size):
    strings[i] = ("Name" + str(i))

Результат:

chararray(['Name0', 'Name1', 'Name2', 'Name3', 'Name4', 'Name5', 'Name6',
           'Name7', 'Name8', 'Name9', 'Name10'], dtype='<U6')
0 голосов
/ 01 мая 2020

Вы можете установить для своего массива dtype значение "S_N", где N - это размер вашей строки (самая большая строка, которую вы намереваетесь вставить). как это:

strings = np.empty(size, "S10")

for i in range (size):
    strings[i] = ("Name" + str(i))

вывод:

[b'Name0' b'Name1' b'Name2' b'Name3' b'Name4' b'Name5' b'Name6' b'Name7'
 b'Name8' b'Name9']
0 голосов
/ 30 апреля 2020

Я думаю, вам нужно только np.array с пониманием списка.

dtype: тип данных, необязательный Требуемый тип данных для массива. Если не указан, то тип будет определен как минимальный тип, необходимый для хранения объектов в последовательности. Этот аргумент может быть использован только для «upcast» массива. Для снижения рейтинга используйте метод .astype (t).

size = 11
np.array([f'Name{i}' for i in range(size)])
#np.array(['Name{}'.format(i) for i in range(size)])

#array(['Name0', 'Name1', 'Name2', 'Name3', 'Name4', 'Name5', 'Name6',
#       'Name7', 'Name8', 'Name9', 'Name10'], dtype='<U6')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...