【问题标题】:Merge 2d arrays(different dimensions) at specified row/column in python在python中的指定行/列合并二维数组(不同维度)
【发布时间】:2014-03-27 16:38:57
【问题描述】:

有没有一种方法可以组合从指定位置开始的两个不同维度的二维数组(最好是 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 将始终适合 Array A,换句话说,Array B 永远不会与 Array A 重叠。

【问题讨论】:

  • @zhangxaochen - thnx 用于数组格式化:)

标签: python arrays numpy merge


【解决方案1】:
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]]

【讨论】:

    【解决方案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.]])   
    

    【讨论】:

    • 这仅适用于我上面提到的确切示例,如果我将更大的数组(4x4)更改为 5x5 甚至更大,或者将位置更改为例如 0 0,我会收到一个错误:'ValueError: can不将输入数组从形状 (3,3) 广播到形状 (4,4)'
    猜你喜欢
    • 2018-09-20
    • 2015-12-02
    • 2019-02-26
    • 1970-01-01
    • 2018-10-04
    • 2018-10-22
    • 2021-12-18
    • 2014-04-23
    • 1970-01-01
    相关资源
    最近更新 更多