2013-07-09 36 views
7

我有一個numpy的陣列,其中每一個值是一個浮子後跟一個整數,例如:保存一個numpy的陣列具有混合數據

my_array = numpy.array([0.4324321, 0, 0.9437212, 1, 0.4738721, 0, 0.49327321, 0]) 

我想保存這樣的:

0.4324321 0 0.9437212 1 0.4738721 0 0.49327321 0 

但如果我叫:

numpy.savetxt('output.dat',my_array,fmt='%f %i') 

我得到一個錯誤:

AttributeError: fmt has wrong number of % formats. %f %i 

我該如何解決這個問題?

+1

'savetxt'不是'array'類型的成員。你的意思是'numpy.savetxt'嗎? – abarnert

+0

順便說一句,如果你顯示你想要的預期輸出看起來像,而不是讓我們猜測,它會真的幫助。並非巧合的是,至少有兩個不同的聰明人沒有讀懂你的想法(或者兩個不同的聰明人加上一個人只有我一樣聰明;我不知道我猜對了) – abarnert

+0

@abarnert感謝您的意見,我編輯帖子來解決這兩個問題。 – rhombidodecahedron

回答

7

真實的問題是,打印出一維8個元素的數組給你8行1列的(或者,如果強制的東西,1行8列的),而不是4行2列。因此,您只能指定一種格式(或者,如果您強制使用1或8種格式)。

如果你想輸出這4×2的形狀,而不是1×8,您需要先重塑陣列:

numpy.savetxt('output.dat', my_array.reshape((4,2)), fmt='%f %i') 

這會給你:

0.432432 0 
0.943721 1 
0.473872 0 
0.493273 0 

The docs是有點混亂,因爲他們把大部分措辭用於處理複雜的數字而不是簡單的浮點數和整數,但基本規則是相同的。您爲每列指定單個說明符或說明符(指定每列的實部和虛部不相關的中間情況)。


如果你想將它寫在1行8列的,首先你需要將它與1行8列,而不是8行的重塑到的東西。

然後你需要指定8種格式。有沒有辦法告訴numpy的「重複這兩種格式的四倍」,但是這很容易,而不numpy的公司幫忙做:

numpy.savetxt('output.dat', my_array.reshape((1,8)), fmt='%f %i ' * 4) 

而且,讓你:

0.432432 0 0.943721 1 0.473872 0 0.493273 0 
+0

其實我想要1x8格式。有可能得到那個嗎? – rhombidodecahedron

+0

1x8,而不是8x1?好的,我會演示如何做到這一點。 – abarnert

1

的問題是,savetxt()會爲每個數組條目打印一行。可以強制2D-array創建一個新的軸,然後打印(1x8)格式:

numpy.savetxt('output.dat', my_array[numpy.newaxis,:], fmt='%f %i'*4)