2012-02-28 7 views

cevap

7

Sen ör .:

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

zamanki dizisi hileler bu çalışma doğrudan numpy karakter dizisi oluşturabilirsiniz. Eğer a var ve ondan b oluşturmak isterseniz

dikkat edin: a eşitsiz sözlerini varsa, Ancak

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

:

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

Böylece gibi bir şey yapabilirsiniz uzunluk (ör. ['snakes','on','a','plane']), daha kısa kelimelerle ne yapmak istersiniz? En uzun kelime boşluklarla Yapabilirsin ped onları:

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

Hangi dize ortalama boşluklu string.center(width) yastıkları,. Ayrıca rjust veya ljust (string docs bakınız) kullanabilirsiniz.

+0

sayesinde, bu muhtemelen benim için çalışacaktır. Ama merak ediyorum ki listeyi anlamak zorunda olmadığım bir yol var mı? Bu operasyonu birçok kez yapmak zorunda kalacağım (daha büyük dizilerle boot etmek için). Derlenmiş kodda döngüler ile bunu yapacak tek bir numpy komutu var mı? –

+0

Özellikle bir matrise zorlamak ederken bireysel harflerle dizeleri böler herhangi numpy komutunun bilmiyorum. Bence liste anlayışları ile sıkışmış olabilirsiniz (ama göreceğiz, belki birisi bunu yapan bir sihir fonksiyonunu bilir). python3 için –

17

Aslında (... kenara olmayan eşit uzunlukta dizeleri hakkında uyarılar) Numpy herhangi kopya veya liste comprehensions olmadan yapabilirsiniz.

import numpy as np 

x = np.array(['hello','snake','plate'], dtype=str) 
y = x.view('S1').reshape((x.size, -1)) 

print repr(y) 

Bu verim: Genel anlamda

array([['h', 'e', 'l', 'l', 'o'], 
     ['s', 'n', 'a', 'k', 'e'], 
     ['p', 'l', 'a', 't', 'e']], 
     dtype='|S1') 

olsa da, ben çoğu durumda dizeleri depolamak için numpy dizileri kullanarak önleyeceğini sadece 1 karakter dizesi dizi olarak görüntülemek ve onu yeniden şekillendirmek. Yararlı olduğu durumlar vardır, ancak genellikle dizeleri tutma için değişken uzunlukta dizelere izin veren veri yapılarına yapışmaktan daha iyidir.

+1

sen dize Unicode dizeleri, işe d_type = np.unicode_ ve görünümünü değiştirmek isterseniz ascii dize – jcr

+0

ise d_type = bayt yazmak gerekiyor ('U1') – ybull

İlgili konular