我在本地创建了一个sun类。我建立了一个简化的地-日系统模型,并试图计算出地球上任何地点在任何时间内太阳的高度角。当我运行当前时间的代码并检查timeanddate时,它匹配得很好。所以它起作用了。在
但后来我想用一年的时间,把所有的高度角存储到一个数组(numpy数组)中,以1分钟为间隔。在
这是我第一次天真的尝试,我敢肯定这对性能不好。我只是想测试一下性能。在
import numpy as np
from datetime import datetime
from datetime import date
from datetime import timedelta
...
...
altitudes = np.zeros(int(year/60))
m = datetime(2018, 5, 29, 15, 21, 0)
for i in range(0, len(altitudes)):
n = m + timedelta(minutes = i+1)
nn = localSun(30, 0, n)
altitudes[i] = nn.altitude() # .altitude() is a method in localSun
altitudes是一个数组,我想把所有的高度存储到其中,它的大小是525969,基本上是一年中的分钟数。在
localSun()对象接受3个参数:colatity(30 deg)、longitude(0 deg)和一个datetime对象,该对象的时间是一个多小时前的时间(当它被发布时)
所以问题是:怎样才能以1分钟的间隔计算一年的时间,计算出当时的高度角,因为这看起来相当慢。我应该用地图来更新高度角的值而不是for循环吗。我想我每次都必须创建一个新的localSun对象。另外,一直创建这些变量n和nn可能是不好的。在
我们可以假设localSun对象所有方法都可以正常工作。我只是在问,什么是一种有效的方法(如果有的话)以1分钟的间隔通过一年,并用高度更新阵列。我的密码应该能透露足够的信息。在
我甚至想在1秒钟的时间间隔内完成这项工作,所以知道是否有一种有效的方法是非常好的。我试过了,但是如果我使用这个代码,那就需要很长时间。在
这段代码在一台大学计算机上花了大约一分钟的时间,据我所知,这台计算机的速度相当快。在
如果有人能回答,我会非常感激。提前谢谢!在
Numpy有naitive
datetime
和timedelta
support,因此您可以采用如下方法:np.vectorize一点也不快,但在您可以修改'localSun'以使用日期时间数组之前,它可以正常工作。在
因为您已经在使用} 进一步。它具有强大的日期和时间操作例程,如^{} :
numpy
,所以您可以使用^{然后需要调整} 的数组,而不是单个的
localSun
来处理^{datetime.datetime
。在从分钟改为秒,就像把
freq='min'
改为freq='S'
一样简单。在相关问题 更多 >
编程相关推荐