我相信这是一个简单的问题,但我是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][50]或更大时,性能真的很低。有没有可以一次增加所有元素的单行方法?
您可以对代码进行低级优化,例如将调用 range() 移到循环之外,这样您就不会在每次循环时都创建新列表(如果您使用的是 3.x,则创建生成器)。
然而,最大的优化是切换到使用 numpy,它将以高性能 C 代码在整个阵列中执行操作。
每当你在 Python 中做数组工作时,如果可能的话,最好使用 numpy 库。
import numpy
matrix = numpy.asarray(matrix,dtype=numpy.float64) + 5.555
如果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]]])