Python: 3D矩阵元素类型转换速度

2024-04-24 08:44:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我相信这是一个简单的问题,但我对Python还不太熟悉,所以任何建议都将不胜感激。 我有一个字符串矩阵,我需要把每个元素转换成float类型,然后再增加一些。我是这样做的:

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]或更大时,性能非常低。 有没有一种方法可以一次增加所有元素?你知道吗


Tags: 方法字符串in元素类型forlenrange
3条回答

无论何时在Python中进行数组工作,如果可能,最好使用numpy库。你知道吗

import numpy

matrix = numpy.asarray(matrix,dtype=numpy.float64) + 5.555

您可以对代码进行低级优化,例如将对range()的调用移到循环之外,这样您就不会每次在循环中创建新的列表(如果使用3.x,则创建生成器)。你知道吗

不过,最大的优化是切换到使用numpy,它将在高性能C代码中跨整个数组执行操作。你知道吗

如果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]]])

相关问题 更多 >