从1-D数据重塑生成4-D阵列

时间:2015-10-05 17:47:02

标签: python arrays numpy multidimensional-array

我有一套油藏的一维渗透率数据,

它是一个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')

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-d阵列,还是需要手动完成?我对python没有太多经验,谢谢

2 个答案:

答案 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)

这是b(蓝色表示低值(1),红色表示高值(10)): On My Player

以下是center image description here

这里是denter image description here

如您所见,c首先沿z轴填充,而d首先沿y轴填充,这要归功于{{3}功能。

我希望这会对你有所帮助。

答案 1 :(得分:0)

来自'It is a 1-D array in the format 6 columns, X rows,'

loadtxt让我怀疑它是一个结构化数组。

向我们展示data.shapedata.dtype

当您在重塑时向我们展示data的相同值。

查看一些'行也可能会有所帮助。例如,数据data[:3,...]