numpy如何将1D数组每个值沿lon/lat维度扩展生成[365,360,720]的3D数组
解决方案
方法1:使用np.broadcast_to(推荐,内存高效)
该方法不会重复复制底层数据,仅生成广播视图,内存占用极低,非常适合大尺寸经纬度数组场景:
import numpy as np # 示例输入 a = np.array([343.79258065, 343.79096774, 343.78935484]) # 先给1维数组追加两个长度为1的维度,形状变为 (n, 1, 1) a_reshaped = a[:, None, None] # 小维度测试,可输出你需要的示意效果 test_result = np.broadcast_to(a_reshaped, (a.shape[0], 2, 4)) print(test_result) # 实际业务场景:生成维度为[365, 360, 720]的CO2数组 co2_3d = np.broadcast_to(a_reshaped, (365, 360, 720)) # 若后续需要修改生成的3维数组,调用.copy()得到独立可修改的数组即可 # co2_3d = np.broadcast_to(a_reshaped, (365, 360, 720)).copy()
方法2:使用np.tile(直接生成复制后的数组)
如果不需要共享内存的视图,也可以用tile直接生成完整数组:
co2_3d = np.tile(a[:, None, None], (1, 360, 720))
实现说明
[:, None, None]等价于[:, np.newaxis, np.newaxis],作用是将形状为(n,)的1维数组转为(n, 1, 1)的3维数组,匹配numpy广播规则- 长度为1的维度会自动扩展到目标尺寸,每个值会完整铺满对应的[360,720]经纬度层
内容的提问来源于stack exchange,提问作者Ndharwood
相关产品推荐
相关产品推荐

