2009-11-18 14 views
5

Chcę napisać ciąg danych do tablicy NumPy. Pseudokod:Napisz ciąg danych do tablicy znaków NumPy?

d = numpy.zeros(10, dtype = numpy.character) 
d[1:6] = 'hello' 

Przykładowy wynik:

d= 
    array(['', 'h', 'e', 'l', 'l', 'o', '', '', '', ''], 
     dtype='|S1') 

Jak można to zrobić najbardziej naturalnie i skutecznie z NumPy?

Nie chcę for pętli, generatorów ani niczego innego. Czy można to zrobić za pomocą jednego polecenia, jak w przypadku pseudokodu?

Odpowiedz

3

Wystarczy wyraźnie uczynić tekstu list (raczej niż, że jest iterable z Python) i NumPy go zrozumie automatycznie:

>>> text = 'hello' 
>>> offset = 1 
>>> d[offset:offset+len(text)] = list(text) 
>>> d 

array(['', 'h', 'e', 'l', 'l', 'o', '', '', '', ''], 
     dtype='|S1') 
+0

Brzydki i nie w miejscu, ale działa. Dzięki. – user213060

+2

Próbowałem użyć iter, aby uniknąć obciążenia pamięci dla dużych ciągów. Nie uwierzysz, co zrobił numpy --- d [1: 6] = iter ("cześć") – user213060

+0

omg, dlatego kazałem ci najpierw użyć listy ... – Paul

2

Jest niewiele potrzeba, aby zbudować listę, gdy masz numpy.fromstring i numpy .fromiter.

+0

Piszę wiele ciągów do różne pozycje na tej samej tablicy. – user213060

1

Możesz wypróbować typ Pythona array. Nie będzie to miało tak dużego wpływu, jak list.

from array import array as pyarray 
d[1:6] = pyarray('c', 'hello') 
Powiązane problemy