Python 将二维阵列合并到现有三维阵列
如果我已经得到了形状为(2,18,18)的d3,我想在d3中添加另一个二维数组d4(18x18),以制作三维数组(3,18,18)。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秒)比第一
我该怎么办 ===2015-12-31= 总结 从下面的答案中,我收集了一些有用的代码
d3=np.连接([d3,d4.重塑(1,d3.形状[0],d4.形状[1]))
d3=np.vstack([d3,d4[None,…])
在同一台笔记本电脑上,第二种方法的效率(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.0np。我需要的是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, ...]])