2012-03-22 22 views
8

Şöyle 2 boyutlu numpy dizi var:Numpy dizileri fazladan gösterim olmaksızın nasıl yazdırılır (köşeli parantez [] ve öğeler arasındaki boşluklar)?

[[a b c] 
[d e f] 
[g h i]] 
ben genellikle diziler ile birlikte gelen varsayılan gösteriminin tüy herhangi olmadan yazdırmak istiyorum

; [, ] ve öğeler arasındaki boşluklar. Böyle bir şey:

abc 
def 
ghi 

o (elbette, önemsiz ve muhtemelen pahalı Python döngü olmadan) böyle bir şey yapmak mümkün mü?

numpy.set_printoptions numaralı telefonu inceledim, ancak yalnızca aralarındaki karakterleri değil, öğelerin nasıl görüntülendiğine ilişkin sunum seçeneklerini ayarlıyor gibi görünüyor.

Düzenleme: Dizideki elemanları [, ] ve boşluklar dahil, her şey olabilir bir dize temsilini var. Böyle bir diziyi nasıl oluşturulacağını Minimal örnek: bir döngü bu hemen hemen miktarlarda iken

class custom(object): 
    def __repr__(self): 
     return 'a' 
a = numpy.empty((5, 5), custom) 
a.fill(custom()) 
print a 
+0

Daha açıkçası: Özel repr size kurtulmak istediğiniz .' 'terminal içerir, ancak belki olmayan diğerlerini dahil et Ne demek istediğini anladığımdan emin değilim. – DSM

+0

Kötüyüm, bu temsilin el ile düzenlenmesinden kaynaklanıyordu. Özgün sorum, normal sayıların sıralı bir dizisini kullanmıştır; bunun için, her bir sayı sınırlayıcı olarak kullanıldığında (veya ondalık ayırıcı olarak değil) bir “.” Vardır. Daha sonra soruyu, dizinin veri türünün mutlaka sayısal olmadığını ve sınırlayıcıyı buna göre değiştirmeyi unuttuğunu düşünerek düzenledim. Tekrar düzenlenmiş. –

+0

Alt küme: yalnızca soruya cevap verdiği için [[] ': http://stackoverflow.com/questions/9360103/how-to-print-a-numpy-array-without-brackets/42046765#42046765 –

cevap

8

, bunun muhtemelen almak için gidiyoruz iyi olduğunu düşünüyorum. Genel olarak join dize yöntemi oldukça hızlıdır.

>>> a = np.array([[1,2,3],[2,4,6],[-1,-2,-3]]) 
>>> print '\n'.join(''.join(str(cell) for cell in row) for row in a) 
123 
246 
-1-2-3 

Bu noktada, muhtemelen bir şeyleri uygulamaktan ve ne kadar sürdüğünü ölçmekten en iyi ihtimalle olacağınızı düşünüyorum. Tahminimce, kodun en yavaş kısmı aslında dizeleri birleştirmek değil, konsola yazdırmak olacaktır.

+0

Eh, sanırım bunu yapmak için "numpy yol" yoktur demektir. Yine de teşekkürler –

0
>>> import numpy  
>>> a = numpy.array([[ 1.0, 2, 3], [ 4, 5, 6], [ 7, 8, 9]]) 
>>> print str(a).replace(' ','').replace('.','').replace('[','').replace(']','') 
123 
456 
789 
+0

+1'i kaldırın. Ben sordum, ama söz konusu gerçek dizi boşluklar ve parantez dahil olmak üzere dize gösterimi herhangi bir şey olabilir özel bir veri türü kullanır. Bu –

+0

@Etienne Perot'u yansıtmak için soruyu düzenledik - çizim tahtasına geri dönün! – fraxel

3
np.savetxt(sys.stdout.buffer, a, fmt='%s', delimiter='') 
+0

Gerçekten 'sys.stdout.buffer'da' .buffer' öğesine ihtiyacınız var mı? –

0

O a diziniz ise sadece bunu oldukça basit:

print(re.sub('[ ]+', ' ', re.sub(' *[\\[\\]] *', '', np.array_str(a)))) 
İlgili konular