从基本 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 可以提供更好的解决方案,我很乐意看到它!这行得通,但我怀疑在性能方面有更好的方法。
我正在尝试使用 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 可以提供更好的解决方案,我很乐意看到它!这行得通,但我怀疑在性能方面有更好的方法。