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

有没有其他方法可以提高速度?当我有 matrix[50][50][50] 或更大时,性能真的很低。有没有一种方法可以一次增加所有元素?

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 回答