1

データの1列のみがロードされる場合に、genfromtxtに次の形状のデータを強制的に出力させる方法はありますか?(xx、1)?通常の形状は(xx、)です。私の例のxxは、任意の整数である可能性があります。

更新:ここにコードの例があります:

import numpy as np
a = np.zeros([1000, 10])
nbcols = 1
for ind in range(0, 10, nbcols)
    a[:, ind : ind + nbcols] = np.genfromtxt('file_1000x10.csv', usecols = range(nbcols))

このコードは、nbcols>=2でのみ機能します。nbcolsが整数c[1、10]であると仮定します。ifステートメントを追加せずにnbcols=1で機能させるための解決策はありますか。

実際、私はこの投稿の元のコードを単純化しすぎましたが、それは私の問題への答えには影響しませんでした。実際、ファイル名は次のように変数を介して指定されます。

filename = 'file_1000x10_' + '%02d' % ind.astype(int) + '.csv'

したがって、forループの各反復で、np.genfromtxtは別のファイルからデータをロードします。

4

2 に答える 2

1

reshape(-1, nbcols)秘訣はあなたが何から得られるかということだと思うnp.genfromtxtので、あなたの割り当ては次のようになります:

a[:, ind:ind + nbcols] = np.genfromtxt('file_1000x10.csv',
                                       usecols = range(nbcols)).reshape(-1, nbcols)

別の注意点として、ループを繰り返しindたり、毎回ファイルを読み取ったりする必要はありません。次のように、少し高次元のブードゥーを行うことができます。

import numpy as np
from StringIO import StringIO

def make_data(rows, cols) :
    data = ((str(k + cols * j) for k in xrange(cols)) for j in xrange(rows))
    data = '\n'.join(map(lambda x: ' '.join(x), data))
    return StringIO(data)

def read_data(f, rows, cols, nbcols) :
    a = np.zeros((rows, (cols + nbcols - 1) // nbcols, nbcols))
    a[...] = np.genfromtxt(f, usecols=range(nbcols)).reshape(-1, 1, nbcols)
    return a.reshape(rows, -1)[:, :cols]

>>> read_data(make_data(3, 6), 3, 6, 2)
array([[  0.,   1.,   0.,   1.,   0.,   1.],
       [  6.,   7.,   6.,   7.,   6.,   7.],
       [ 12.,  13.,  12.,  13.,  12.,  13.]])
>>> read_data(make_data(3, 6), 3, 6, 1)
array([[  0.,   0.,   0.,   0.,   0.,   0.],
       [  6.,   6.,   6.,   6.,   6.,   6.],
       [ 12.,  12.,  12.,  12.,  12.,  12.]])
>>> read_data(make_data(3, 6), 3, 6, 4)
array([[  0.,   1.,   2.,   3.,   0.,   1.],
       [  6.,   7.,   8.,   9.,   6.,   7.],
       [ 12.,  13.,  14.,  15.,  12.,  13.]])

元の回答your_arrayサイズ1の追加の寸法を使用 に追加できます。

your_array.reshape(your_array.shape + (1,))

または同等のもの

your_array.reshape(-1, 1)

同じことはで達成することができます

your_array[..., np.newaxis]

または同等のもの

your_array[..., None]
于 2013-01-18T14:23:20.717 に答える
1

loadtxtの代わりにを使用できgenfromtxt、バージョン1.6.0以降のnumpyを使用している場合、ndmin引数を使用すると、配列の(最小)次元数を指定できます。例えば:

a[:, ind : ind + nbcols] = np.loadtxt('file_1000x10.csv', usecols=range(nbcols), ndmin=2)
于 2013-01-18T18:56:24.857 に答える