2009-11-18 20 views
5

データ列をNumPy配列に書きたいと思います。擬似コード:データ文字列をNumPy文字配列に書き込みますか?

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

例の結果:

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

はどのようにこれはnumpyので最も自然かつ効率的に行うことができますか?

私はループ、ジェネレータ、または何か反復する必要はありません。for擬似コードと同じように1つのコマンドで実行できますか?

答えて

3

だけで明示的に作るテキストlist(というよりも、それは、Pythonから反復可能であること)とNumPyが自動的にそれを理解します:

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

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

醜いですが、インプレースではありませんが、動作します。ありがとう。 – user213060

+2

私は巨大な文字列のメモリオーバヘッドを避けるためにiterを使ってみました。あなたはnumpyが何をしたのか信じられないでしょう--- d [1:6] = iter( 'hello') – user213060

+0

omgだから、私はあなたに最初にリストを使うように言ったのです... – Paul

2

あなたはnumpy.fromstringとnumpyのを持っているときに、リストを構築することはほとんど必要があります.fromiter。

+0

同じアレイ上の異なる位置。 – user213060

1

Pythonのarray型を試してみることもできます。 listと高いオーバーヘッドはありません。

from array import array as pyarray 
d[1:6] = pyarray('c', 'hello') 
関連する問題