2012-03-22 203 views
8

我有一個2維numpy的陣列,其看起來像這樣:如何打印Numpy數組沒有任何額外的符號(方括號[]和元素之間的空格)?

[[a b c] 
[d e f] 
[g h i]] 

我想打印它沒有任何通常帶有陣列的默認記法絨毛;即[,]和元素之間的空格。像這樣的:

abc 
def 
ghi 

是否有可能做這樣的事情(當然,沒有一個微不足道的和可能昂貴的Python循環)?

我看過numpy.set_printoptions,但它看起來像只設置顯示元素的顯示選項,而不是顯示元素間的字符。

編輯:所述陣列中的元件具有字符串表示,可以是任何東西,包括[]和空白。如何建立這樣的陣列小例子:

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

只是要清楚:你的自定義再版包括終端'.'你想擺脫的,但可能包括你沒有的其他人?我不確定我是否理解你想剝離什麼。 – DSM 2012-03-22 20:18:21

+0

我的不好,這是由於我手工編輯表示。我原來的問題使用了一個普通數字的numpy數組,每個數字用作分隔符(或小數分隔符,不確定)後面有一個'.'。後來,我編輯我的問題,以反映數組的數據類型不一定是數字,並忘記相應地更改分隔符。再次編輯。 – 2012-03-22 20:28:03

+0

子集:只刪除'[]':http://stackoverflow.com/questions/9360103/how-to-print-a-numpy-array-without-brackets/42046765#42046765 – 2017-02-04 23:18:52

回答

8

雖然這幾乎達一個循環,我覺得這可能是你會得到最好的。通常,join字符串方法非常快。

>>> 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 

我覺得在這一點上,你可能會是最好關閉實施的東西,並測量需要多長時間。我的猜測是,代碼中最慢的部分實際上是打印到控制檯,而不是將字符串連接在一起。

+0

嗯,我想這意味着沒有「numpy的方式」來做到這一點。無論如何感謝 – 2012-03-22 22:16:48

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,因爲它確實回答了問題我問,但真正有問題的數組使用自定義數據類型,字符串表示可以是任何東西,包括空格和括號。編輯這個問題來反映這個 – 2012-03-22 20:11:20

+0

@Etienne Perot - 回到繪圖板! – fraxel 2012-03-22 20:22:01

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

你真的需要'.buffer'在'sys.stdout.buffer'嗎? – 2017-02-04 23:18:27

0

這很簡單,如果a是你的陣列只是這樣做:

print(re.sub('[ ]+', ' ', re.sub(' *[\\[\\]] *', '', np.array_str(a)))) 
相關問題