Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将二维阵列合并到现有三维阵列_Python_Arrays_Numpy - Fatal编程技术网

Python 将二维阵列合并到现有三维阵列

Python 将二维阵列合并到现有三维阵列,python,arrays,numpy,Python,Arrays,Numpy,如果我已经得到了形状为(2,18,18)的d3,我想在d3中添加另一个二维数组d4(18x18),以制作三维数组(3,18,18)。 我该怎么办 ===2015-12-31= 总结 从下面的答案中,我收集了一些有用的代码 d3=np.连接([d3,d4.重塑(1,d3.形状[0],d4.形状[1])) d3=np.vstack([d3,d4[None,…]) 附言 在我通过读取681.csv文件构建三维阵列(681x50x60)的测试之后, 在同一台笔记本电脑上,第二种方法的效率(19秒)比第一

如果我已经得到了形状为(2,18,18)的d3,我想在d3中添加另一个二维数组d4(18x18),以制作三维数组(3,18,18)。
我该怎么办

===2015-12-31=

总结 从下面的答案中,我收集了一些有用的代码

  • d3=np.连接([d3,d4.重塑(1,d3.形状[0],d4.形状[1]))

  • d3=np.vstack([d3,d4[None,…])

  • 附言 在我通过读取681.csv文件构建三维阵列(681x50x60)的测试之后,

    在同一台笔记本电脑上,第二种方法的效率(19秒)比第一种方法(28秒)高。

    以下内容可能有用,但我认为有一种更有效的方法可以达到相同的效果

    >>>d1.shape
    >>>(18,18)
    >>>d2.shape
    >>>(18,18)
    >>>d3 = array([d1, d2])
    >>>d3.shape
    >>>(2, 18, 18)  
    
    编辑:有更好的方法

    在中,stack命令用于将数组按字面顺序堆叠在一起。例如,请考虑:

    import numpy as np
    d1 = np.array([[1, 2, 3], [4, 5, 6]])
    d2 = np.array([[7, 8, 9], [1, 2, 3]])
    d3 = np.array([d1, d2])
    
    dnew = np.array([[6, 5, 4], [3, 2, 1]])
    d3 = np.array([dnew] + [d3[a, ...] for a in range(d3.shape[0])])
    
    # Add to the end of the array
    dlast = np.array([[6, 5, 4], [3, 2, 1]])
    d3 = np.array([d3[a, ...] for a in range(d3.shape[0])] + [dlast])
    

    使用
    np.vstack
    和仅使用
    np.array
    创建新数组之间有一个重要区别。后者(在numpy版本1.8.2上测试)生成一个包含两个对象的数组,而stack生成一个numpy数组。

    与使用
    d3
    时相同,只需将
    d4
    重新塑造为三维数组:

    d3=数组([d3,d4.重塑(1,18,18)])


    <代码> d3=级联([d3,d4.整形(1, 18, 18)])< /代码>

    将你的新数组改写为(1, 18, 18),并且如果你有选择的话,你也可以考虑沿着第三轴而不是第一个来堆叠事物。它与numpy的广播更为自然,您将能够使用
    np.dstack
    来准确地执行您正在执行的操作。另一方面,
    d4.reforme(1,18,18)
    也可以作为
    d4[None,…][/code>或
    d4[np.newaxis,…][/code>执行。省略号
    有效地填充了其他维度,而无需知道它们的确切大小。使用
    None
    和/或
    newaxis
    (它们是同一个对象)进行切片会添加一个新的单体维度。
    d3
    的形状在此之后是否正确,或者
    d3
    是否成为两个numpy数组的数组?@ilent2这之后的d3的形状是(3,18,18)@ZachiShtain您使用的是哪个版本的numpy,您可以发布代码来重现您的结果吗?也许我打错了…@ilent2我使用的是numpy 1.9.0
    np。我需要的是vstack
    。谢谢
    import numpy as np
    d1 = np.array([[1, 2, 3], [4, 5, 6]])
    d2 = np.array([[7, 8, 9], [1, 2, 3]])
    d3 = np.array([d1, d2])
    
    dnew = np.array([[6, 5, 4], [3, 2, 1]])
    d3 = np.vstack([d3, dnew[None, ...]])