1

これは簡単な質問だと思いますが、私は Python を初めて使用するので、何か提案をいただければ幸いです。文字列の行列があり、すべての要素を浮動小数点型に変換してから、それをいくつか増やす必要があります。私はこのようにしました:

for i in range(0,len(matrix)):
    for j in range(0,len(matrix[i])):
        for k in range(0,len(matrix[j])):
            matrix[i][j][k] = float(matrix[i][j][k]) + 5.555

速度を上げるためにこれを行う他の方法はありますか?マトリックス[50][50][50]以上の場合、パフォーマンスは非常に低くなります。すべての要素を一度に増やすことができる1行の方法はありますか?

4

3 に答える 3

4

range() への呼び出しをループの外に移動して、ループのたびに新しいリスト (または 3.x を使用している場合はジェネレーター) を作成しないようにするなど、コードに対して実行できる低レベルの最適化があります。 .

ただし、大きな最適化はnumpyの使用に切り替えることです。これにより、高性能 C コードで配列全体にわたって操作が実行されます。

于 2012-10-04T16:47:57.737 に答える
3

Python で配列作業を行う場合は、可能であれば numpy ライブラリを使用することをお勧めします。

import numpy

matrix = numpy.asarray(matrix,dtype=numpy.float64) + 5.555
于 2012-10-04T16:51:22.617 に答える
2

互換性がある場合は、それを配列matrixに入れることができます (おそらくそうするべきです) 。numpyこれは数値計算用の非常に便利なライブラリであり、多くの関数が付属しています。何をしたいかによっては、scipy.

import numpy as np

a = np.array(matrix)
a += 5.5555

例としていくつかのランダムなデータを与えます:

from numpy.random import random_sample

>>> a = random_sample( (3, 3, 3) )
>>> a
array([[[ 0.98899266,  0.10761687,  0.7784259 ],
        [ 0.79253918,  0.450742  ,  0.46417501],
        [ 0.71733034,  0.26575819,  0.19360072]],

       [[ 0.41609296,  0.96195897,  0.32777537],
        [ 0.59527144,  0.96655918,  0.50073892],
        [ 0.70797323,  0.406036  ,  0.47092251]],

       [[ 0.8572665 ,  0.00076713,  0.25379833],
        [ 0.03426925,  0.59837259,  0.85390736],
        [ 0.78306972,  0.00238982,  0.28702393]]])
>>> a += 5.55555
>>> a
array([[[ 6.54454266,  5.66316687,  6.3339759 ],
        [ 6.34808918,  6.006292  ,  6.01972501],
        [ 6.27288034,  5.82130819,  5.74915072]],

       [[ 5.97164296,  6.51750897,  5.88332537],
        [ 6.15082144,  6.52210918,  6.05628892],
        [ 6.26352323,  5.961586  ,  6.02647251]],

       [[ 6.4128165 ,  5.55631713,  5.80934833],
        [ 5.58981925,  6.15392259,  6.40945736],
        [ 6.33861972,  5.55793982,  5.84257393]]])
于 2012-10-04T16:57:00.940 に答える