python - 从 1 维数据 reshape 生成 4 维数组

标签 python arrays numpy multidimensional-array

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

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

z=1 带跟踪器的数据(正确格式) z=1 data with tracer (correct format)

z=2 带有跟踪器的数据(看看它如何填充错误的切片) z=2 data with tracer (see how it populated wrong slice)

有没有办法确定重新形状如何填充数据?是否有更合适的函数通过确定何时对每个轴进行切片来从大型一维数组创建四维数组,或者是否需要手动完成?我对 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)

这里是b(蓝色代表低值(1),红色代表高值(10)): enter image description here

这是c: enter image description here

这是d: enter image description here

如您所见,c 首先沿 z 轴填充,而 d 已沿 y 轴第一,感谢 numpy.swapaxes功能。

希望这对您有帮助。

关于python - 从 1 维数据 reshape 生成 4 维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32954736/

相关文章:

python - CodeHS 8.3.8 : Word Ladder? 我还需要什么

python - Twitter、多进程和数据库

python - 为什么 python 要求你在等待条件之前获取锁

python - import numpy 和 import numpy as np 的区别

python - 使用 numpy 平铺二维数组

python - 如何在 python 中格式化 LaTeX 字符串?

arrays - Array.new(10, & :next) in ruby 下面是什么

java - 一次查找数组 12 个元素的最大值

arrays - puppet 中的数组转换,用于最终加入和包含在命令中

python - Numpy.where() 在其条件中包含一个数组