1

だから私は.wavファイルを持っています。これから私はデータを取得しました:サウンドファイルから予想されるように、それはステレオであるため、データは次のようになります

リスト1(オリジナルリスト)

[[1,2]、[2,3]、[4,9]、[1,5]、[1,7]、....]

注:これらの数値を作成したばかりですが、要点はネストされたリストです。ここでの問題は、その上でFFTを実行しているため、2つのチャネルの平均のみを使用したいので、次のようにします。

リスト2(平均)

[[1.5]、[2.5]、[6.5]、[3]、[4]、....]

そのために私はしました:

averaged_array =  [sum(x)/len(x) for x in original_list]

len(x)は、常に2になりますが、定数時間の操作であると思います。

ここでの問題は、元のリストの長さが>900,000であると私が信じていることです。自宅のコンピューターでは、平均して約46秒です。私がプレゼンテーションに使用しなければならないコンピューターでは、121秒ほどかかります。これはかなりの増加であり、実行中に待機しなければならないのは率直に言って悪いことです。とにかくこれを最適化して時間がかかる時間を減らすことができますか?

注:これはダブルコアコンピューターだと思うので、これを並行して実行することはできません(私は思いますか?)。使用許可が与えられているサーバー(いくつかのi7が実行されている)にSSHで接続することは可能です。何らかの方法でSSHで接続し、そこで計算を行った方がよいでしょうか。私が使用している元のコンピューターは約2GHzですが、古いデルモデルの相対的なものです(数年前のシリーズ)。さらに、マカフィーと別のプロセスも処理の最大50%を消費し、私にはこれらを強制終了する権利がありません。

私がそうするなら:

  • SSH経由でこのリモートコンピューターで計算を行うにはどうすればよいですか?(私はPython 2.7を使用していますが、これは私のコンピューターではなく組織のコンピューターであるため、外部ライブラリをインストールしたくないと思います)
  • ある種の「順序」で計算を行うことができるでしょうか?並行して行う場合、コアが開いて計算できるようになるとすぐに行われるので、順序を維持できないと思いました。順序とは、つまり、リストが元のリストと同じインデックスで平均を維持することを意味します。元。[[1,2]、[3,4]]は[[3.5]、[2.5]]ではなく[[2.5]、[3.5]]を与える必要があります
4

1 に答える 1

6

この種のタスクには、事実上の標準のNumPyモジュールを使用する必要があります。このモジュールは、効率的な方法で大きな配列を処理します (これが必要な場合は、FFT も実行します)。

平均を行う方法は次のとおりです。

>>> a = numpy.array([[1,2], [2,3], [4,9], [1,5], [1,7]])
>>> numpy.average(a, axis=-1)
array([ 1.5,  2.5,  6.5,  3. ,  4. ])

私のマシンでは、100 万ペアのアレイで平均を実行するのに 22 ミリ秒しかかかりません。

その後、モジュールを使用して FFT を実行できnumpy.fftます。

于 2012-04-07T00:42:33.797 に答える