如何在 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')])

ab 是两个数组,大小为 (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 中的所有值仍然为零,它不会用ab 替换c 中的值。你知道是什么问题吗? c 中的行和列是列表,而 ab 是数组。我尝试制作一个值为ab 的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 数组相乘和求和的最快方法?

求大神指导,如何在Mac上安装cocos2d—x,就是可以在Xcode中用的

如何初始化所有值相同的2D数组?

Qt中的2D游戏:初始化怪物并将动态分配的数组作为指针参数传递[关闭]