Как мне создать массивы персонажей в numpy? - PullRequest
14 голосов
/ 28 февраля 2012

Скажем, у меня есть следующий массив:

import numpy as np
a = ['hello','snake','plate']

Я хочу, чтобы это превратилось в массив numpy b, чтобы:

b[0,0] = 'h'
b[0,1] = 'e'
b[0,2] = 'l'
b[1,0] = 's'
...

Я хотел, чтобы стандартные приемы numpyработа, как вещание, сравнение и т. д.

Как это делается?И где это в этой тупой документации?

Спасибо!

Uri

Ответы [ 2 ]

17 голосов
/ 29 февраля 2012

На самом деле, вы можете сделать это без каких-либо копий или перечислить понимание в numpy (предостережения о строках неравной длины в стороне ...).Просто просмотрите его как массив строк из 1 символа и измените его:большинство случаев.В некоторых случаях это полезно, но обычно лучше придерживаться структур данных, которые допускают строки переменной длины для хранения строк.

11 голосов
/ 28 февраля 2012

Вы можете напрямую создать массив пустых символов, например:

b = np.array([ ['h','e','l','l','o'],['s','n','a','k','e'],['p','l','a','t','e'] ])

С этим работают обычные приемы с массивами.

Если у вас есть a и вы хотите generate b, обратите внимание, что:

list('hello') == ['h','e','l','l','o']

Таким образом, вы можете сделать что-то вроде:

b = np.array([ list(word) for word in a ])

Однако, если a имеет слова неравной длины (например, ['snakes','on','a','plane']) что вы хотите сделать с более короткими словами?Вы можете заполнить их пробелами до самого длинного слова:

wid = max(len(w) for w in a)
b = np.array([ list(w.center(wid)) for w in a])

Который string.center(width) дополняет пробелы, центрируя строку.Вы также можете использовать rjust или ljust (см. строковые документы ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...