如何在 python 中用两个 2D 数组初始化一个 3D 数组?
Posted
技术标签:
【中文标题】如何在 python 中用两个 2D 数组初始化一个 3D 数组?【英文标题】:how do I initialize a 3D array with two 2D array in python? 【发布时间】:2022-01-05 19:47:38 【问题描述】:我有两个数组如下:
a=np.vstack([np.loadtxt(path, dtype='float') for path in glob.iglob(r'E:/PostDoc/720/*.txt')])
b=np.vstack([np.loadtxt(path, dtype='float') for path in glob.iglob(r'E:/PostDoc/1080/*.txt')])
a
和 b
是两个数组,大小为 (640,6)
现在我定义一个 3D 数组如下:
c = [[[0 for col in range(6)]for row in range(len(psnr_bitrate_1080))] for x in range(2)]
我想将 a 和 b 放入 c 中,为此,我使用以下代码:
c[:][:][0]=a
c[:][:][1]=b
但它什么也不做,c
中的所有值仍然为零,它不会用a
和b
替换c
中的值。你知道是什么问题吗? c
中的行和列是列表,而 a
和 b
是数组。我尝试制作一个值为a
和b
的3D 数组。我不知道为什么它不能正确地做。请告诉我该怎么做。谢谢。
【问题讨论】:
[:]
在做什么?不是你的意图;实际上在做什么?为什么不[:,:,0]
?
是的,没错。因为我是python的初学者,所以对语法不是很熟悉。通过这样做,它可以工作。我用这个 c=np.zeros((len(a),2,6)) c[:,0,:] = a c[:,1,:] = b 谢谢
【参考方案1】:
如果你想“堆叠”两个二维数组,那么最直观的方法是 使用 dstack:
c = np.dstack((a, b))
这样你之前甚至不需要创建任何空数组。
但是,如果您想“沿另一个轴”堆叠两个源数组 (正如我从您的评论中看到的那样),运行例如:
c2 = np.swapaxes(c, 1, 2)
然后c2[:,0,:]
将返回您的第一个源数组。
【讨论】:
以上是关于如何在 python 中用两个 2D 数组初始化一个 3D 数组?的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 中从两个 1D 数组(2D 图)创建一个 2D 数组(3D 图)(用于计算希尔伯特谱)
如何在简洁的单行初始化语句中用 n 个不同的空数组填充新数组? [复制]
在 python 中将 4D 数组与 2D 数组相乘和求和的最快方法?