3D numpy 配列のスライスに問題があります。zcdata
すべてのコーナーが繰り返されるため、実際のグリッドのサイズの 2 倍のサイズを持つ物理グリッド システムのコーナー ポイントの深さの3D データ配列 ( ) があります (隣接するグリッドはコーナー ポイントを共有しますが、データ セットで繰り返されます)。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])
各方向の他のすべてのインデックスに最後の 1 つのコーナーを加えた一意のコーナー ポイントのみを抽出することに関心があります (したがって、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
一方、次の 1 つずつスライスは完全に機能します。
zcorn_data_1N = zcorn_data[:,:,kk]
zcorn_data_1N = zcorn_data_1N[:,jj,:]
zcorn_data_1N = zcorn_data_1N[ii,:,:]
ここで何かポイントが欠けているのではないかと思っていました!