【问题标题】:how do I initialize a 3D array with two 2D array in python?如何在 python 中用两个 2D 数组初始化一个 3D 数组?
【发布时间】: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 谢谢

标签: python arrays python-3.x numpy


【解决方案1】:

如果你想“堆叠”两个二维数组,那么最直观的方法是 使用 dstack:

c = np.dstack((a, b))

这样你之前甚至不需要创建任何空数组。

但是,如果您想“沿另一个轴”堆叠两个源数组 (正如我从您的评论中看到的那样),运行例如:

c2 = np.swapaxes(c, 1, 2)

然后c2[:,0,:] 将返回您的第一个源数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-24
    • 2015-08-05
    • 2011-01-11
    • 2012-11-24
    • 2010-12-28
    • 2012-12-13
    • 2015-02-03
    相关资源
    最近更新 更多