2

を使用してデータをインポートしてnumpy.genfromtxtいます。データセット内の値から派生した値のフィールドを追加したいと考えています。これは構造化配列であるため、配列に新しい列を追加する最も簡単で効率的な方法は、 を使用することnumpy.lib.recfunctions.append_fields()です。このライブラリの適切な説明が見つかりましたHERE

genfromtxtおそらく派生値を追加できる空の列を強制的に作成することにより、配列をコピーせずにこれを行う方法はありますか?

4

2 に答える 2

1

私はこれを読もうとしていgenfromtxtました:

11,12,13,14,15
21,22,
31,32,33,34,35
41,42,43,,45

使用:

import numpy as np
print np.genfromtxt('tmp.txt',delimiter=',',filling_values='0')

しかし、うまくいきませんでした。空の列を表すために、コンマを追加して入力を変更する必要がありました。

11,12,13,14,15
21,22,,,
31,32,33,34,35
41,42,43,,45

その後、それは機能し、次を返しました:

[[ 11.  12.  13.  14.  15.]
 [ 21.  22.   0.   0.   0.]
 [ 31.  32.  33.  34.  35.]
 [ 41.  42.  43.   0.  45.]]
于 2013-05-09T20:47:14.150 に答える
1

genfromtxtを使用して、ジェネレーターを使用してフィールドをデータ ファイルに追加する簡単な例を次に示します。

サンプルのデータ ファイルはdata.txtで、内容は次のとおりです。

1,11,1.1
2,22,2.2
3,33,3.3

そう

In [19]: np.genfromtxt('data.txt',delimiter=',')
Out[19]:
array([[  1. ,  11. ,   1.1],
       [  2. ,  22. ,   2.2],
       [  3. ,  33. ,   3.3]])

次のようなジェネレータを作成するとします。

def genfield():
    for line in open('data.txt'):
        yield '0,' + line

ファイルの各行にカンマで区切られた 0 を前に追加すると、次のようになります。

In [22]: np.genfromtxt(genfield(),delimiter=',')
Out[22]:
array([[  0. ,   1. ,  11. ,   1.1],
       [  0. ,   2. ,  22. ,   2.2],
       [  0. ,   3. ,  33. ,   3.3]])

次のように、内包表記を使用して同じことを行うことができます。

In [26]: np.genfromtxt(('0,'+line for line in open('data.txt')),delimiter=',')
Out[26]:
array([[  0. ,   1. ,  11. ,   1.1],
       [  0. ,   2. ,  22. ,   2.2],
       [  0. ,   3. ,  33. ,   3.3]])
于 2014-04-08T22:11:57.337 に答える