我有一套油藏的一维渗透率数据,
它是一个1-D数组,格式为6列,X行,需要重构为:
60 x 220 x 85个细胞(1.122x106个细胞)
如果我导入数据,并使用z = 1的重新形状函数,它将填充正确的格式(从左到右阅读并首先用x = 1填充y,z = 1然后用x =填充y 2等。
如果我使用z = 2,它在到达[x1,y,z1]的顶部后填充[x1,y,z2],然后返回并填充[x2,y,z1],在每个之间有效地分割它切片,
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')
有没有办法确定重塑形状如何填充数据?是否有更合适的功能,通过确定每个轴的切片时间从大型1-d阵列创建4-d阵列,还是需要手动完成?我对python没有太多经验,谢谢
答案 0 :(得分: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)
如您所见,c
首先沿z
轴填充,而d
首先沿y
轴填充,这要归功于{{3}功能。
我希望这会对你有所帮助。
答案 1 :(得分:0)
'It is a 1-D array in the format 6 columns, X rows,'
的 loadtxt
让我怀疑它是一个结构化数组。
向我们展示data.shape
和data.dtype
。
当您在重塑时向我们展示data
的相同值。
查看一些'行也可能会有所帮助。例如,数据data[:3,...]
。