4D numpy数组字典:如何优化?

2024-09-27 19:10:32 发布

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

我有一个问题的表现,在日化字典的4-D numpy张量。你知道吗

我有一份名单:

cnames = ['CN', 'CM', 'CA', 'CY', 'CLN' ...];

这不是固定大小(取决于上面的代码)。 对于每个系数,我必须生成一个零的四维张量[nalpha X nmach X nbeta X nalt](为了预分配的目的),所以我要:

#Number of coefficients
numofc = len(cnames);

final_data = {};
#I have to generate <numofc> 4D matrixes
for i in range(numofc):
    final_data[cnames[i]]=n.zeros((nalpha,nmach,nbeta,nalt));

每个索引都是10到30之间的整数。 每个索引是一个介于100和200之间的整数

这大概需要4分钟。我怎样才能加快速度?还是我做错了什么?你知道吗


Tags: numpydata字典cm整数cncafinal
1条回答
网友
1楼 · 发布于 2024-09-27 19:10:32

您发布的代码不应该花费4分钟来运行(除非cnames非常大或者您的RAM非常少,并且被迫使用交换空间)。你知道吗

import numpy as np

cnames = ['CN', 'CM', 'CA', 'CY', 'CLN']*1000
nalpha,nmach,nbeta,nalt = 10,20,30,40
#Number of coefficients
numofc = len(cnames)

final_data = {}
#I have to generate <numofc> 4D matrixes
for i in range(numofc):
    final_data[cnames[i]]=np.zeros((nalpha,nmach,nbeta,nalt))

即使cnames有5000个元素,也应该只需要几秒钟:

% time test.py
real    0m4.559s
user    0m0.856s
sys 0m3.328s

语句末尾的分号表示您有其他语言的使用经验。小心将该语言中的命令逐行翻译成NumPy/Python。用NumPy编写代码就像用C编写代码一样,是一个缓慢的秘诀。你知道吗

特别是,尽量避免逐个元素更新数组中的元素。这在C语言中工作得很好,但在Python中非常慢。NUMPY通过将函数委托给FORTRAN或Cython或C或C++来实现。通过逐个元素更新数组,您使用的Python循环速度就没有以前快了。你知道吗

相反,试着用对整个数组(或者至少是数组切片)的操作来重新表述您的计算。你知道吗

我可能对问题的原因推测得太多了。您需要profile your code,然后,如果您想要更具体的帮助,发布概要文件的结果和有问题的代码(最有用的形式是SSCCE)。你知道吗

相关问题 更多 >

    热门问题