2009-11-18 1 views
5

Ich möchte eine Datenfolge in ein NumPy-Array schreiben. Pseudo-Code:Schreiben Sie eine Datenfolge in ein NumPy-Zeichen-Array?

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

Beispiel Ergebnis:

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

Wie kann dies am natürlichsten und effizient mit NumPy getan werden?

Ich möchte nicht for Schleifen, Generatoren oder irgendetwas iterativ. Kann es mit einem Befehl wie mit dem Pseudocode gemacht werden?

Antwort

3

Nur explizit Ihren Text macht ein list (eher als dass es iterable von Python) und NumPy wird es automatisch verstehen:

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

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

Hässlich und nicht an Ort und Stelle, aber funktioniert. Vielen Dank. – user213060

+2

Ich habe versucht, einen Iter zu verwenden, um den Speicheraufwand für große Strings zu vermeiden. Sie werden nicht glauben, was numpy tat --- d [1: 6] = iter ('hallo') – user213060

+0

omg, deshalb habe ich dir gesagt, eine Liste an erster Stelle zu verwenden ... – Paul

2

Es gibt wenig Notwendigkeit, eine Liste zu erstellen, wenn Sie numpy.fromstring und numpy haben .fromiter.

+0

Ich schreibe viele Zeichenfolgen an verschiedene Positionen auf dem gleichen Array. – user213060

1

Sie könnten Pythons array Typ versuchen. Es wird nicht so viel Overhead haben wie ein list.

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