2017-03-25 72 views
2

我想“连接”两个相同形状的二维numpy数组来创建一个三维numpy数组。我可以使用循环轻松完成此操作,但我正在寻找更快的方法。这是玩具的例子。这两个numpy阵列是:python:连接两个二维numpy数组来创建三维数组

data1 = np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]) 
data2 = np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]])*100 

data1 

> array([[ 1, 2, 3, 4, 5], 
     [ 6, 7, 8, 9, 10], 
     [11, 12, 13, 14, 15]]) 

data2 

> array([[ 100, 200, 300, 400, 500], 
     [ 600, 700, 800, 900, 1000], 
     [1100, 1200, 1300, 1400, 1500]]) 

两者都有一个形状(3,5)。我想创建(3,5,2)形状numpy数组。那就是:

data3 = [] 
for irow in range(data1.shape[0]): 
    data3_temp = [] 
    for icol in range(data1.shape[1]): 
     data3_temp.append([data1[irow,icol], 
          data2[irow,icol]]) 
    data3.append(data3_temp) 
data3 = np.array(data3) 

data3.shape 
> (3, 5, 2) 

data3 

>array([[[ 1, 100], 
    [ 2, 200], 
    [ 3, 300], 
    [ 4, 400], 
    [ 5, 500]], 

    [[ 6, 600], 
    [ 7, 700], 
    [ 8, 800], 
    [ 9, 900], 
    [ 10, 1000]], 

    [[ 11, 1100], 
    [ 12, 1200], 
    [ 13, 1300], 
    [ 14, 1400], 
    [ 15, 1500]]]) 

请让我知道。

回答

2

使用numpy.dstack堆叠阵列中序列深度明智(沿第三轴):https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.dstack.html

import numpy as np 

data1 = np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]) 
data2 = np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]])*100 

print np.dstack((data1,data2)) 

输出:

[[[ 1 100] 
    [ 2 200] 
    [ 3 300] 
    [ 4 400] 
    [ 5 500]] 

[[ 6 600] 
    [ 7 700] 
    [ 8 800] 
    [ 9 900] 
    [ 10 1000]] 

[[ 11 1100] 
    [ 12 1200] 
    [ 13 1300] 
    [ 14 1400] 
    [ 15 1500]]] 
+2

现在带着几分更多的灵活性,'np.stack((),轴= -1)'。 – hpaulj

+0

@hpaulj好戏!特别是对于这个问题,'np.stack((),axis = 2)'很清楚。但是,使用'axis = -1'适用于一般设置:) – kmario23

1

一个方法:

data3= np.zeros([ data1.shape[0],data1.shape[1], 2]) 

data3[:,:,0],data3[:,:,1] = data1,data2 

print data3.shape 
print data3 

导致

(3L, 5L, 2L) 

>array([[[ 1, 100], 
    [ 2, 200], 
    [ 3, 300], 
    [ 4, 400], 
    [ 5, 500]], 

    [[ 6, 600], 
    [ 7, 700], 
    [ 8, 800], 
    [ 9, 900], 
    [ 10, 1000]], 

    [[ 11, 1100], 
    [ 12, 1200], 
    [ 13, 1300], 
    [ 14, 1400], 
    [ 15, 1500]]]) 
1

或者你可以使用r_串接:

np.r_['2,3,0', data1, data2] 
# array([[[ 1, 100], 
      [ 2, 200], 
      [ 3, 300], 
      [ 4, 400], 
      [ 5, 500]], 

     [[ 6, 600], 
      [ 7, 700], 
      [ 8, 800], 
      [ 9, 900], 
      [ 10, 1000]], 

     [[ 11, 1100], 
      [ 12, 1200], 
      [ 13, 1300], 
      [ 14, 1400], 
      [ 15, 1500]]])