在python中的指定行/列合并2d数组(不同的维度)

时间:2014-02-25 12:39:43

标签: python arrays numpy merge

是否有办法从指定位置开始组合两个不同尺寸的2d阵列(最好是numpy阵列),例如:从位置1 1开始将3x3合并为4x4阵列:

阵列A

1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4

阵列B

5 5 5
5 5 5
5 5 5

结果数组

1 1 1 1
2 5 5 5
3 5 5 5
4 5 5 5

更多说明:

  • 阵列A的两个轴将始终具有相同的大小,例如200x200到4096x4096
  • 阵列B轴的尺寸可能不同,例如。 50x60,但ArrayB将始终适合阵列A,换句话说,阵列B将永远不会与阵列A重叠。

2 个答案:

答案 0 :(得分:2)

In [32]: a2 = np.loadtxt(StringIO.StringIO("""5 5 5\n 5 5 5\n 5 5 5"""))                         

In [33]: a1 = np.loadtxt(StringIO.StringIO("""1 1 1 1\n 2 2 2 2\n 3 3 3 3\n 4 4 4 4"""))         

In [34]: a1[1:, 1:] = a2                                                                         

In [35]: a1
Out[35]: 
array([[ 1.,  1.,  1.,  1.],                                                                     
       [ 2.,  5.,  5.,  5.],                                                                     
       [ 3.,  5.,  5.,  5.],                                                                     
       [ 4.,  5.,  5.,  5.]])   

答案 1 :(得分:2)

In [231]: def merge(a, b, pos):
     ...:     res=a[:]
     ...:     res[pos[0]:pos[0]+b.shape[0], pos[1]:pos[1]+b.shape[1]]=b
     ...:     return res

In [232]: C=merge(A, B, (1,1))
     ...: print C
[[1 1 1 1]
 [2 5 5 5]
 [3 5 5 5]
 [4 5 5 5]]