首页 > 解决方案 > 如何在for循环中堆叠一系列二维数组,输出到多维数组

问题描述

我有一个函数,我想在一系列传感器高度 (z)上运行(在python 3.7中)。每个生成的二维数组都应该堆叠成一个多维数组,然后我可以稍后访问。我无法合并我的输出,现在每次我运行我的 for 循环时,它都会覆盖之前的运行。

我试过使用 np. stack 和 concatenate 并尝试在堆栈之外使用 np.append ,以及尝试诸如 之类的东西np.stack(AS_temp[k]),这导致了错误。

AS = np.zeros((len(z),len(x),len(y)))  
for k in range(len(z)):
    AS_temp = np.sqrt((GradX[k]**2) + (GradY[k]**2) + (GradZ[k]**2))
    AS = np.stack(AS_temp,axis = 0)

for 循环应该遍历每个 z 值,计算 AS_temp 函数(这是一个 2D 数组),然后将其垂直添加到我的多维数组 AS。最后,我想要一个 3D 空间,其中每个水平 ' slice' 代表来自 for 循环的 az 值。

标签: python-3.xfor-loopmultidimensional-array

解决方案


有很多方法可以做到这一点。如果你仍然想要 numpy.zeros

AS = np.zeros((len(z),len(x),len(y)))  
for k in range(len(z)):
    AS[k] = np.sqrt((GradX[k]**2) + (GradY[k]**2) + (GradZ[k]**2))

没有堆叠。如果要使用堆栈,则需要在最后使用它。(根据文档说,“每个数组必须具有相同的形状。”

AS_stack = []
for k in range(len(z)):
    AS_stack.append(np.sqrt((GradX[k]**2) + (GradY[k]**2) + (GradZ[k]**2)))
AS = np.stack(AS_stack,axis = 0)

或者,如果 GradX、GradY 和 GradZ 实际上也是数组:

AS = np.sqrt((GradX**2) + (GradY**2) + (GradZ**2))

推荐阅读