gpt4 book ai didi

python - Numpy 下一个元素减去上一个

转载 作者:太空宇宙 更新时间:2023-11-04 08:28:35 24 4
gpt4 key购买 nike

我想从 numpy 数组的特定轴上的当前元素中减去下一个元素。但是,我知道如何使用大量循环来做到这一点。我的问题是:如何以最有效的方式做到这一点?也许使用 numpy?

我的 Python 代码如下:

import numpy as np

np.random.seed(0)

myarr = np.random.rand(20, 7, 11, 151, 161)

newarr = np.full((20, 6, 11, 151, 161), np.nan)

for iyr in range(20):
for iwk in range(6):
for imb in range(11):
for ilat in range(151):
for ilon in range(161):
newarr[iyr, iwk, imb, ilat, ilon] = myarr[iyr, iwk + 1, imb, ilat, ilon] - myarr[iyr, iwk, imb, ilat, ilon]

最佳答案

有一些很好的方法可以做到这一点。如果你不关心最后一个元素是 NaN,你可以使用 np.diff

myarr = np.random.rand(20, 7, 11, 151, 161)
newarr = np.diff(myarr, axis=1)

结果的形状为 (20, 6, 11, 151, 161)

如果您真的想保留这些 NaN,我建议您使用 np.empty_likenp.subtract .分配 np.full有点浪费,因为您肯定设置了几乎所有元素。您拥有的唯一 NaN 位于第二个维度的最后一个索引中,您可以自己以非常低的成本对其进行初始化:

myarr = np.random.rand(20, 7, 11, 151, 161)
newarr = np.empty_like(myarr) # Don't repeat shape
newarr[:, -1, ...] = np.nan
np.subtract(myarr[:, 1:, ...], myarr[:, :-1, ...], out=newarr[:, :-1, ...])

myarr[:, 1:, ...]myarr[:, :-1, ...]newarr[:, :-1, ...] 是 View ,这个操作几乎完全避免了临时数组和不必要的初始化。

关于python - Numpy 下一个元素减去上一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54772063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com