You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用两个numpy一维数组生成含重复元素的二维数组

Numpy数组转换问题求助

我是Python新手,现在遇到numpy数组处理的问题,希望得到帮助。我有两个一维numpy数组:

Lon_gp = np.arange(10,20,0.25 ).reshape(-1,1)
Lat_gp = np.arange(40,50,0.25 ).reshape(-1,1)

我想把这两个数组转换成如下形式的二维数组:

Lon_listLat_list
1040
1040.25
1040.5
1040.75
......
1049.25
10.2540
10.2540.25
10.2540.50
10.2540.75

目前我只写了几行代码:

n_lon = len(Lon_gp)
n_lat = len(Lat_gp)

lon_list = np.empty(n_lon * n_lat)

for i in Lon_gp:
    a = np.repeat(i, n_lat)

解决方案

你要的是两个数组的笛卡尔积,用numpy内置函数可以高效实现,完全不需要手动循环:

方法1:用np.repeat + np.tile组合

import numpy as np

Lon_gp = np.arange(10,20,0.25).reshape(-1,1)
Lat_gp = np.arange(40,50,0.25).reshape(-1,1)

n_lon = len(Lon_gp)
n_lat = len(Lat_gp)

# 每个经度值重复n_lat次,生成经度列
lon_col = np.repeat(Lon_gp, n_lat, axis=0)
# 整个纬度数组重复n_lon次,生成纬度列
lat_col = np.tile(Lat_gp, (n_lon, 1))

# 合并为目标二维数组
result = np.hstack((lon_col, lat_col))

方法2:用np.meshgrid

import numpy as np

Lon_gp = np.arange(10,20,0.25)
Lat_gp = np.arange(40,50,0.25)

# 生成网格,indexing='ij'保证经度先遍历所有纬度,和目标格式一致
lon_grid, lat_grid = np.meshgrid(Lon_gp, Lat_gp, indexing='ij')
# 展平后合并为二维数组
result = np.hstack((lon_grid.flatten().reshape(-1,1), lat_grid.flatten().reshape(-1,1)))

补充:你的代码如何完善

如果坚持用循环,需要把每次生成的重复数组拼接起来,否则只会保留最后一次循环的结果:

n_lon = len(Lon_gp)
n_lat = len(Lat_gp)

lon_list = np.empty((n_lon * n_lat, 1))
lat_list = np.empty((n_lon * n_lat, 1))

for idx, lon in enumerate(Lon_gp):
    start = idx * n_lat
    end = start + n_lat
    lon_list[start:end] = np.repeat(lon, n_lat)
    lat_list[start:end] = Lat_gp

result = np.hstack((lon_list, lat_list))

注意:循环方法效率远低于numpy内置函数,数据量大时不推荐使用。


内容的提问来源于stack exchange,提问作者Tee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 18:12:46