次のような1行しかないデータファイルがあります。
1.2 2.1 3.2
numpyバージョン1.3.0loadtxtを使用してロードしました
a,b,c = loadtxt("data.dat", usecols(0,1,2), unpack=True)
出力は、次のような配列ではなくフロートでした
a = 1.2
私はそれが次のようになると思います:
a = array([1.2])
複数行のファイルを読み取ると、機能しています。
何が起こっているのかというと、配列をロードすると、一次元の配列が得られます。解凍すると、一連の数値、つまり次元のない配列が取得されます。これは、配列を解凍すると、配列の次元数が1つ減るためです。一次元配列から始めて、それは単純な数に要約されます。
のタイプをテストする場合、それはfloatではなく、numpy.floatであり、配列のすべてのプロパティを持ちますが、形状としてボイドタプルを持ちます。つまり、これは配列であり、1つとして表されるだけではありません。
必要なのが要素が1つだけの単次元配列である場合、最も簡単な方法は、配列を解凍する前に配列の形状を変更することです。
#note the reshape function to transform the shape
a,b,c = loadtxt("text.txt").reshape((-1,1))
これにより、期待どおりの結果が得られます。何が起こっているのかというと、それを二次元配列に再形成したので、それを開梱すると、次元の数が1つに減ります。
多次元配列で正常に機能し、1次元配列を読み取るときに1次元を維持する必要がある場合は、loadtxtを使用して正常に読み取り、第2フェーズで配列の形状を変更し、配列が1次元である場合はそれらを一次元に変換するのが最善の方法だと思います。純粋な数字
a,b,c = loadtxt("text.txt",unpack=True)
for e in [a,b,c]
e.reshape(e.shape if e.shape else (-1,))
numpyのinbuitloadtxtパラメーターndminを使用するだけです。
a,b,c=np.loadtxt('data.dat',ndmin=2,unpack=True)
出力
a=[1.2]
reshapeを使用しない簡単な方法は、リストを明示的に型キャストすることです。
a,b,c = loadtxt("data.dat", usecols(0,1,2), unpack=True)
a,b,c = (a,b,c) if usi.shape else ([a], [b], [c])
これは、形を変えるよりも速く機能します!