如何从文件数据改进批量计算

时间:2017-04-12 19:03:30

标签: python-2.7 math

我有一个二进制值文件。我正在查看的部分是4字节int,其值为MW1, MVAR1, MW2, MVAR2,...

我用

读取了值
temp = array.array("f")
temp.fromfile(file, length *2)
mw_mvar = temp.tolist()

然后我计算出这样的幅度。

mag = [0] * length
for x in range(0,length * 2, 2):
    a = mw_mvar[x]
    b = mw_mvar[x + 1]
    mag[(x / 2)] = sqrt(a*a + b*b)

计算(不是读取)是我脚本总长度的两倍。我知道(理论上)有一种方法可以更快地完成这项工作,因为我模仿了一个最终调用fortran的脚本(pyd在fortran中调用函数dll),它能够对运行时的影响微不足道。

这是我能想到的最好的。有任何改进建议吗?

我也尝试了math.pow()**.5**2,没有任何差异。

1 个答案:

答案 0 :(得分:0)

没有运气改善计算,我解决了这个问题。我意识到我只需要这些计算值的1%,所以我创建了一个按需计算它们的类。对我来说很重要的是,生成的代码的行为类似于计算值列表。该过程的许多其余部分使用这些值,并且预先计算了不同版本的数据。该类意味着我不需要为每个版本的数据提供一套程序

class mag:
    def __init__(self,mw_mvar):
        self._mw_mvar = mw_mvar
        #_sgn = sgn
    def __len__(self):
        return len(self._mw_mvar/2)
    def __getitem__(self, item):
        return sqrt(self._mw_mvar[2*item] ** 2 + self._mw_mvar[2*item+1] ** 2)

ps这也可以在一个函数中完成,并采用两个版本。我将不得不对整个脚本进行更多更改。

function (a,b,x): 
    if b[x]==0:
        return a[x]
    else: 
        return sqrt(a[x]**2 + b[x]**2)