2

空の配列を事前に割り当てようとしていると同時に、次のコードを使用してサイズが 19x5 のデータ型を定義しています。

import numpy as np
arr=np.empty((19,5),dtype=[('a','|S1'),('b', 'f4'),('c', 'i'),('d', 'f4'),('e', 'f4')])

結果はやや予想外で、19*5*5 の配列になります。ただし、次のことを試みます。

arr=np.empty((19,1),dtype=[('a','|S1'),('b', 'f4'),('c', 'i'),('d', 'f4'),('e', 'f4')])

行ごとに適切な長さ (5 フィールド) を与えます。これは明らかに 1D 配列のように見えます。

これを書こうとすると、次のフォーマットのみが許可されます。

np.savetxt(file, arr, delimiter=',', fmt='%s')

これは、単一の文字列を扱っていることを示しています。フラット化されていない 19x5 の形状の構造化配列を取得する方法はありませんか?

主な問題は、これを savetxt で書き込むときに発生します。5 つの列の値をすべて含む csv ファイルが必要です。これは文字列として処理されるため、間違った出力が得られます。

4

1 に答える 1

4

通常、構造化配列のフィールドは 2 次元配列の列を置き換えます。多くの場合、csv をロードしてgenfromtxt、結果が 1d になる理由を疑問に思います。あなたが見つけたように、化合物を使用して2次元配列を作成できますがdtype、各要素には複数の値があります- dtype.

通常、その配列を 1 次元形状で初期化します(19,)

フィールドまたはタプルのリストで値を入力する必要があることに注意してください。

savetxt構造化配列を使用した経験がなく、このタブレットでテストを実行できません。しかし、おそらく役立つ質問があります。

savetxt配列を反復し、入力から構築されたfmt%tuple(row)を書き込みます。fmt

試してみることをお勧めします-dtypeの各フィールドfmt='%s %s. %s. %s %s'のフォーマット。%そのドキュメントを参照してください。また、(19,) 配列が (19,1) 配列よりも適切に動作するかどうかもわかりません。

配列の要素の書式設定を試してください。それらは、フォーマッタにとってタプルのように見えるはずです。tolist()またはを試してくださいtuple(A[0])

これは、複製するのにほぼ十分な答えです

https://stackoverflow.com/a/35209070/901925

 ab = np.zeros(names.size, dtype=[('var1', 'S6'), ('var2', float)])
 np.savetxt('test.txt', ab, fmt="%10s %10.3f")

===================

savetxtタプルの書式設定のため、1 次元の構造化配列のみを処理できます。

于 2016-04-08T20:49:17.117 に答える