从基础2D数组构造3D数组 - Numpy

时间:2015-02-19 08:35:32

标签: python arrays numpy 3d 2d

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

在这个例子中,我试图通过复制20次,使用基础2D阵列(10x10)制作10x10x20 3D阵列。

我的2D阵列开始:

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

还有其他方法可以做同样的事吗?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

碰到了类似的问题...

我需要将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给出更好的解决方案,我很乐意看到它!这有效,但我怀疑在性能方面有更好的方法。