1

私が見たcsvファイルのほとんどは、次のような配列を格納しています:

#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')より「一般的な」形式を取得するために使用する必要があります。

「共通」ファイルを読み込んxでから読み取ることに注意してください。y

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

xy = scipy.genfromtxt('common.txt')
x = xy[:,0]
y = xy[:,1]

xy = scipy.genfromtxt('common.txt', names=True)
x = xy['x']
y = xy['y']

あるいは:

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)

エラーが発生するため、ヘッダーを使用できません (とにかく、このヘッダーには本当の意味がありますか?)。

4

2 に答える 2

2

np.savetxt1 行に 1 つの要素を持つ 1 次元配列を書き込みます。

np.savetxt1 行に 1 行の 2 次元配列を書き込みます。

scipy.savetxt('y.txt', y...)これは、長い列が 1 つ表示される理由を説明しています。また、numpy/scipy(x, y)は 2 次元配列ではなく 1 次元タプルと見なします。これがあなたが得る理由です

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

xデータをy変数に読み戻すには、次のunpack=Trueパラメーターを使用します。

x, y = np.genfromtxt(filename, unpack=True)
于 2013-03-21T14:44:26.700 に答える
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)

これにより、期待どおりの結果が得られます。

于 2013-03-21T14:36:43.593 に答える