将二维阵列与现有的三维阵列相结合

时间:2015-12-30 14:42:54

标签: python arrays numpy

>>>d1.shape
>>>(18,18)
>>>d2.shape
>>>(18,18)
>>>d3 = array([d1, d2])
>>>d3.shape
>>>(2, 18, 18)  

如果我已经获得了具有形状的d3(2,18,18)并且我想将另一个2-d阵列d4(18x18)添加到d3中以制作3-d阵列(3,18,18)。登记/>  我该怎么办?

==== 2015-12-31 =====

摘要

从下面的答案中,我在这里收集了一些有用的代码

  
      
  1. d3 = np.concatenate([d3, d4.reshape(1, d3.shape[0],d4.shape[1])])

  2.   
  3. d3 = np.vstack([d3, d4[None, ...]])

  4.   

PS

通过读取681 .csv文件测试构建3-d数组(681x50x60)后, 第二种方法比同一台笔记本电脑上的第一种方法(28秒)效率更高(19秒)。

2 个答案:

答案 0 :(得分:5)

d3相同,只需将d4重塑为三维数组:

d3 = array([d3, d4.reshape(1, 18, 18)])

d3 = concatenate([d3, d4.reshape(1, 18, 18)])

答案 1 :(得分:1)

以下可能有用,但我想有一种更有效的方法来实现相同的结果......

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])

编辑:有更好的方法

this question中,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.vstack([d3, dnew[None, ...]])

使用np.vstack和使用np.array创建新数组之间存在重要差异。后者(在numpy版本1.8.2上测试)生成两个对象的数组,而堆栈生成一个numpy数组。