2015-10-05 39 views
1

我有一個1-d集,用於油儲層滲透率數據,生成從1-d的數據的4-d陣列重塑

它在格式6列,X行的1-d陣列它需要在形狀進行重組:

60×220 X 85個細胞(1.122x106細胞)

如果我導入數據,以及使用重新形函數以Z = 1,它填補了正確的格式(從左到右閱讀和其中x = 1,Z = 1個,則填充,其中x = 2等

如果IU y個第一填充ÿ SE Z = 2它填充[X1,Y,Z 2]之後到達[X1,Y,Z1]的頂部,然後返回並填充的[X2,Y,Z 1]有效地分離它每個切片之間,

import numpy as np 
data = np.loadtxt("spe_phi_sample.prn") 
print(data.shape) 
data = np.reshape(data, (60,85,2)) 
print(data.shape) 
x,y,z = data.nonzero() 
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 
fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 

ax.scatter(x, y, -z, c=data[x,y,z] , zdir='z') 

Z = 1的數據用示蹤劑(正確格式) z=1 data with tracer (correct format)

Z = 2點的數據用示蹤劑(看看它是如何填充錯誤的切片) z=2 data with tracer (see how it populated wrong slice)

有一種方法,以確定如何重新塑造填充數據?是否有更適合的功能,用於通過確定何時對每個軸進行切片,或者是否需要手動完成,從大型1-d陣列創建4維陣列?我對python不太熟悉,謝謝

回答

1

當您使用numpy.reshape時,您必須記住,它將使用索引順序讀取元素,並將使用此索引順序將元素放置到重新整形的數組中。默認索引順序由下式給出:最後一個軸指數變化最快,回到第一軸指數變化最慢(其中...,第二軸是y和第一軸是x)。

爲了更好地瞭解發生了什麼,這裏是一段代碼:

import numpy as np 

# Create array. 
size1 = 10 
size2 = 60 
shape = (size1, size2) 
a = np.mod(np.arange(1, size1 * size2 + 1), size2).reshape(shape) 
# Reshape array with z = 1. 
b = np.reshape(a, (size1, size2, 1)) 
# Reshape array with z = 2. 
c = np.reshape(a, (size1, size2/2, 2)) 
# Reshape array correctly. 
d = np.reshape(a, (size1, 2, size2/2)) 
d = np.swapaxes(d, 1, 2) 

這裏是b(藍色爲低值(1)和紅高值(10)): enter image description here

這裏是center image description here

這裏是denter image description here

正如你所看到的,c一直沿着z軸填充第一,而d一直沿着y軸填充第一,由於numpy.swapaxes功能。

我希望這會幫助你。

0

'It is a 1-D array in the format 6 columns, X rows,' from loadtxt讓我懷疑它是一個結構化數組。

顯示我們倆data.shapedata.dtype

當你在展示我們重塑後data相同的值。

這也可以幫助查看的數據,例如幾個「行」 data[:3,...]