我有一组油藏的一维渗透率数据,
它是一个 6 列 X 行格式的一维数组,需要将其重组为以下形状:
60 x 220 x 85 单元(1.122x106 单元)
如果我导入数据,并使用 z = 1 的 reshape 函数,它将填充正确的格式(从左到右读取并首先用 x=1,z=1 填充 y,然后用 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')
有没有办法确定重新形状如何填充数据?是否有更合适的函数通过确定何时对每个轴进行切片来从大型一维数组创建四维数组,或者是否需要手动完成?我对 python 不太有经验,谢谢
最佳答案
当您使用numpy.reshape
时,您必须记住,它将使用索引顺序读取元素,并使用此索引顺序将元素放入 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
轴第一,感谢 numpy.swapaxes
功能。
希望这对您有帮助。
关于python - 从 1 维数据 reshape 生成 4 维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32954736/