我有一个问题的表现,在日化字典的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分钟。我怎样才能加快速度?还是我做错了什么?你知道吗
您发布的代码不应该花费4分钟来运行(除非
cnames
非常大或者您的RAM非常少,并且被迫使用交换空间)。你知道吗即使
cnames
有5000个元素,也应该只需要几秒钟:语句末尾的分号表示您有其他语言的使用经验。小心将该语言中的命令逐行翻译成NumPy/Python。用NumPy编写代码就像用C编写代码一样,是一个缓慢的秘诀。你知道吗
特别是,尽量避免逐个元素更新数组中的元素。这在C语言中工作得很好,但在Python中非常慢。NUMPY通过将函数委托给FORTRAN或Cython或C或C++来实现。通过逐个元素更新数组,您使用的Python循环速度就没有以前快了。你知道吗
相反,试着用对整个数组(或者至少是数组切片)的操作来重新表述您的计算。你知道吗
我可能对问题的原因推测得太多了。您需要profile your code,然后,如果您想要更具体的帮助,发布概要文件的结果和有问题的代码(最有用的形式是SSCCE)。你知道吗
相关问题 更多 >
编程相关推荐