2013-03-21 57 views
1

大多數的CSV文件,我已經看到賣場陣列是這樣的:爲什麼scipy.savetxt('filename',(x,y))按行而不是列保存數組?

#x y 
0 10 
1 11 
2 12 
. 
. 
. 

那麼,爲什麼scipy.savetxt('scipy.txt', (x, y), header='x y', fmt='%g')將存儲x, y這樣的:

# x y 
0 1 2 3 4 5 
10 11 12 13 14 15 

雖然scipy.savetxt('y.txt', y, header='y', fmt='%g')會給:

# y 
10 
11 
12 
13 
14 
15 

我不得不使用scipy.savetxt('common.txt', scipy.column_stack((x,y)), header='x y', fmt='%g')來獲得更「普通」的格式。

注意閱讀從 「普通」 文件xy

x, y = scipy.genfromtxt('common.txt', unpack=True)

甚至:

xy = scipy.genfromtxt('common.txt', names=True) 
x, y = zip(*xy) 
x, y = scipy.array(x), scipy.array(y) 

從 「SciPy的」 文件:

x, y = scipy.genfromtxt('scipy.txt')

雖然:

xy = scipy.genfromtxt('test.txt', names=True) 

會產生一個錯誤,所以我們不能用頭(反正做這個頭有一個真正的含義是什麼?)。

回答

2

np.savetxt每行寫入一維元素的一維數組。

np.savetxt寫入每行一行的二維數組。

這解釋了爲什麼scipy.savetxt('y.txt', y...)會給你一個長列。此外,numpy/scipy認爲(x, y)是一維元組,而不是二維數組。這就是爲什麼你得到

0 1 2 3 4 5 
10 11 12 13 14 15 

爲輸出。

因此,要獲得所需的輸出,請傳遞一個2維數組。使用np.column_stack,正如你提到的,可能是最簡單的方法:

import numpy as np 
np.savetxt(filename, np.column_stack((x,y)), fmt='%g') 

讀取數據回xy變量,使用unpack=True參數:

x, y = np.genfromtxt(filename, unpack=True) 
2

問題可能是您保存了(2,N),您確實需要一個(N,2)數組。

import numpy as np 
x = np.arange(10) 
y = x + 2 
print (x,y).shape 
#(2,10) 
z = np.array(zip(x,y)) 
print z.shape 
#(10,2) 

或使用頭

z = np.array(zip(x,y),dtype=[('x',int),('y',float)]) 
print z.shape 
#(10,) 
np.savetxt('tmp.txt',z) 

一個結構數組這給了你所期望的。

相關問題