我想迭代数组的每个单元格值。我尝试使用np.nditer方法(对于np.nditer(bar_st_1)中的i)。然而,即使使用64 GB RAM的笔记本电脑,它也会占用大量的计算时间并耗尽内存。你知道什么是提取每个数组值的最简单和最快的方法吗?谢谢
#Assign the crop specific irrigated area of each array for each month accoridng to the crop calander
#Barley
for Barley in df_dist.Crop:
for i in np.nditer(bar_st_1):
for j in df_area.Month:
for k in df_dist.Planting_month:
for l in df_dist.Maturity_month:
if (j>= min(k,l)) and (j<= max(k,l)):
df_area.Barley=i
else:
df_area.Barley=0
我的目标是从每个数组中提取一个值,并将其分配给每个生长季节(month). df_dist是包含每个月增长面积的区级数据框。bar_st_1是一个数组(7*7),其中包含特定地区的灌溉面积。对于每个特定小区,我想提取相应数组的值,并根据生长季节为特定月份赋值(如果条件如上所述)
1条答案
按热度按时间2vuwiymt1#
这个代码块看起来浪费了很多精力。如果你改变了迭代的顺序,你可以写
这样你就避免了做大量的比较和计算大量的max(k,l),这是不必要的。
i
上的循环也是浪费精力,因为您将df_area.Barley
的某些条目写入i
,但在以后的迭代中,您用不同的i
值覆盖它们,而从未(在您共享的代码中)使用df_area
和第一个i
值。所以你可以把代码简化为
现在,您已经从嵌套循环结构中消除了一个层次,并缩短了另一个层次的迭代,因此您可能会获得10倍或更高的速度提升。