1

という名前のリストがありますdatasdatas.append(data).

dataそして、サイズの配列29*44100 (29 seconds .wav).

これで 903 波形の曲ができました。

load 293 into datas(use append() function),

それらをリストから配列に変換しますvstack(datas)

エラーが発生しました:ValueError: array is too big.

同じことを行うことができるが、このエラーを引き起こさない他の方法はありますか?

ありがとう。

コードの詳細については、次を参照してください。

rates = []
datas = []
labels = []
count = 0

filepath = glob.glob('*.wav')

for fp in filepath:

    if (count<293):

        count +=1            
        rate, data0 = read(fp)
        data = numpy.asarray(data0,dtype=theano.config.floatX)
        data /= numpy.max(numpy.abs(data),axis=0)#normalize to +1..-1            
        length = data.size     

        for index in range(0,length,44100):

            if (index+44100) < length:

                datas.append(data[index:index+44100])
                labels.append(random.randint(1,5))

train_set = numpy.vstack(datas)
4

1 に答える 1

1

このコードで問題を再現しようとしました:

import numpy as N

datas = []
for i in range(293):
    datas.append( N.random.rand(44100) )        
res = N.vstack(datas)

これは私にとっては問題なく動作しますが、非常に広い範囲でも問題ありません。これはうまくいきますか?はいの場合、問題は別の場所にある可能性があります。大きなリストを操作するときに時々遭遇するメモリの問題を回避するために、 eg を使用して大きな空の配列を作成N.zeros((44100,293))し、配列に直接書き込むことをお勧めします。

res = N.zeros((44100,293))
for i in range(293):
    res[:,i] = N.random.rand(44100)

コメントのディスカッションから編集:

私が理解している限りでは、データ量を RAM に並べて割り当てることはできません。詳細については、このスレッドを参照してください。メモリを超えないように、適切な方法でデータをダウンサンプリングまたはスライスする必要があります。int8さらに、標準の代わりに、配列の大きなデータ形式を減らすことを検討してくださいfloat64

あなたが言ったように、あなたは線形回帰をしたいのですが、たとえば最小二乗法による線形回帰はセグメント化されたデータで機能することを強調したいと思います。フィッティング変数のセットを変更すると、各ポイントでの偏差が評価され、最終的に偏差の合計が表示されます。通常は行列ベースの方法を適用するため、フィッティング ルーチンを作成する必要があります。これは、仕事に行く途中で頭に浮かんだばかりです - 多分それはあなたを助けるでしょう.

于 2013-10-10T09:29:39.113 に答える