2015-10-05 69 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,...]