Как создать массив символов в numpy?
скажем, у меня есть следующий массив:
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 работали, такие как трансляция, сравнение и т. д.
как это делается? И где это в документации numpy?
спасибо!
Uri
2 ответов
вы можете создать массив символов numpy напрямую, например:
b = np.array([ ['h','e','l','l','o'],['s','n','a','k','e'],['p','l','a','t','e'] ])
обычные трюки массива работают с этим.
если у вас a
и желаю, чтобы создать 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
(см. string docs).
На самом деле, вы можете сделать это без каких-либо копий или списков в numpy (предостережения о строках неравной длины в сторону...). Просто просмотрите его как массив строк из 1 символа и измените его:
import numpy as np
x = np.array(['hello','snake','plate'], dtype=str)
y = x.view('S1').reshape((x.size, -1))
print repr(y)
это дает:
array([['h', 'e', 'l', 'l', 'o'],
['s', 'n', 'a', 'k', 'e'],
['p', 'l', 'a', 't', 'e']],
dtype='|S1')
вообще говоря, я бы избегал использования массивов numpy для хранения строк в большинстве случаев. Есть случаи, когда это полезно, но обычно лучше придерживаться структур данных, которые позволяют строки переменной длины для, ну, держит струны.