2013-12-23 54 views
1

我有一個2D numpy的數組:添加名字numpy的陣列

my_array = numpy.array([[1,2],[3,4]]) 

當我打印出來,它出來是這樣的:

>>> print(my_array) 
[[1 2] 
[3 4]] 

是否有可能把標籤或名稱上輸出?例如,讓我們說,我有

names = [['a', 'b'], ['c', 'd']] 

那麼我想

a [[1 2] 
b [3 4]] 
    c d 
+2

這不是一個答案,但...這聽起來像你可能會感興趣的[熊貓](http://pandas.pydata.org)。 – abarnert

回答

4

你不想pandas

>>> import numpy 
>>> import pandas as pd 
>>> my_array = numpy.array([[1,2],[3,4]]) 
>>> pd.DataFrame(my_array, columns=list('cd'), index=list('ab')) 
    c d 
a 1 2 
b 3 4 
+1

我不認爲這是一個真正的答案。他問NumPy如何做到這一點。 (這就是爲什麼我寫了同樣的評論。) – abarnert

+0

@abarnert好吧,讓我們等待OP澄清。 – alko

2

可以np.savetxt做到這一點,但它會是真的哈克。

或者,你可以後期處理的strrepr,但是這真的醜陋,它會變得更加複雜陣列差,但即使對於一個固定的2x2的陣列,它是這樣的:

def format_my_2x2_array(a): 
    s = str(a).splitlines() 
    s[0] = 'a ' + s[0] 
    s[1] = 'b ' + s[1] 
    col0 = s[1].find('[') + 1 
    col1 = s[1].find(' ', col0) + 1 
    s.append(' ' * col0 + 'c' + ' ' * (col1 - col0 - 1) + 'd') 
    return '\n'.join(s) 

做到在一個乾淨的話,你就需要手動遍歷的內容,並加入了他們自己,就像你的,你想打印出NumPy的樣式表的正常Python列表。

如果列和行名稱是您的數據的固有部分,你可能不希望在I/O功能,在事後釘他們,而是將它們存儲的數據。這正是Pandas的好處 - 基本上,DataFrame可以用作索引名稱的數組。如果你想用NumPy來做到這一點,這並沒有什麼幫助,但是就像你想用NumPy而不是列表列表來操作矩陣或大像素數組一樣,你想用Pandas代替NumPy例如,對具有命名行和列的結構進行操作。