从基本 2D 数组构建 3D 数组 - Numpy

Constructing 3D array from base 2D array - Numpy

我正在尝试使用 Numpy 在 python 中创建 3D 数组,并将 2D 数组乘以第 3 维。我是 Numpy 多维数组的新手,基本上我在这里遗漏了一些重要的东西。

在此示例中,我尝试通过复制 20 次使用基本 2D 数组 (10x10) 制作 10x10x20 3D 数组。

我的起始二维数组:

a = zeros(10,10)
for i in range(0,9):
    a[i+1, i] = 1

我尝试创建 3D 阵列的内容:

b = zeros(20)
for i in range(0,19):
    b[i]=a

这种方法可能很愚蠢。那么从基本 2D 数组构建 3D 数组的正确方法是什么?

干杯。

编辑 嗯,我做错事可能是因为我的 R 背景。

这是我最终的做法

b = zeros(20*10*10)
b = b.reshape((20,10,10))
for i in b:
    for m in range(0, 9):
        i[m+1, m] = 1

还有其他方法可以做到吗?

构造多维数组的方法有很多种。

如果你想从给定的 2D 数组构建 3D 数组,你可以做类似的事情

import numpy

# just some 2D arrays with shape (10,20)
a1 = numpy.ones((10,20))
a2 = 2* numpy.ones((10,20))
a3 = 3* numpy.ones((10,20))

# creating 3D array with shape (3,10,20)
b = numpy.array((a1,a2,a3))

视情况而定,还有其他更快的方法。但是,只要您使用内置构造函数而不是循环,您就处于快速状态。

对于 Edit 中的具体示例,我将使用 numpy.tri

c = numpy.zeros((20,10,10))
c[:] = numpy.tri(10,10,-1) - numpy.tri(10,10,-2)

遇到类似问题...

我需要像这样将 2D 数组修改为 3D 数组: (y, x) -> (y, x, 3)。 这是针对此问题的几个解决方案。

解决方案 1

使用python工具集

array_3d = numpy.zeros(list(array_2d.shape) + [3], 'f')
for z in range(3):
    array_3d[:, :, z] = array_2d.copy()

解决方案 2

使用 numpy 工具集

array_3d = numpy.stack([array_2d.copy(), ]*3, axis=2)

这就是我想到的。如果有人知道 numpy 可以提供更好的解决方案,我很乐意看到它!这行得通,但我怀疑在性能方面有更好的方法。