我对 3d numpy 数组的切片有疑问。我有一个 3d 数据数组zcdata
(假设网格Nx,Ny,Nz
在 X、Y 和 Z 方向上有单元格;我的角数据大小为2*Nx, 2*Ny, 2*Nz
该数据从一个巨大的 ASCII 文件中读取为一个长的 1D 数组,然后使用以下代码将其重新整形为适当的 3d 格式。在我的情况下Nx, Ny, Nz = (229, 233, 45)
,因此 zcdata 的维度(角数据数组)的维度(458 * 466 * 90)
有点大。
zcdata is a (2*Nx * 2*Ny * 2*Nz) long array loaded from ASCII file as input:
zcorn_data = zcdata.reshape([2*Nz,2*Ny,2*Nx]).transpose([2,1,0])
我有兴趣仅提取唯一的角点,即每个方向上的每隔一个索引加上最后一个角(因此对于 N 个单元,我们需要定义 N+1 个角:简单数学:3 个单元和 4 个角示例 o--o --o--o) X,Y,Z 中正确的索引切片如下所示:
ii = np.append(range(0,2*Nx,2),-1)
jj = np.append(range(0,2*Ny,2),-1)
kk = np.append(range(0,2*Nz,2),-1)
现在,尝试一次对 3D 冗余角数据进行切片(使用以下代码行):
zcorn_data_1N = zcorn_data[ii,jj,kk]
失败并显示以下错误消息:
Traceback (most recent call last): File "D:\ISI\Projects\09 Adco-Bab\5 Codes Cleaned\10 SRM Tools-Eclipse.py", line 755, in Read_Grid_CornPts zcorn_data_1N = zcorn_data[np.append(range(0,2*Nx,2),-1), np.append(range(0,2*Ny,2),-1),np.append(range(0,2*Nz,2),-1)] ValueError: shape mismatch: objects cannot be broadcast to a single shape
而下面的一对一切片效果很好:
zcorn_data_1N = zcorn_data[:,:,kk]
zcorn_data_1N = zcorn_data_1N[:,jj,:]
zcorn_data_1N = zcorn_data_1N[ii,:,:]
我想知道我是否在这里遗漏了任何一点!