【问题标题】:How to combine two 2D array into the following in Python?如何在 Python 中将两个二维数组组合成以下数组?
【发布时间】:2018-06-02 17:33:28
【问题描述】:

假设我有 2 个二维数组如下:

A = [[1, 2],
     [3, 4]]

B = [[5, 6, 7],
     [8, 9, 8],
     [7, 6, 5]]

是否有一个numpy函数可以将A和B组合成C如下?

C = [[1, 2, 0, 0, 0],
     [3, 4, 0, 0, 0],
     [0, 0, 5, 6, 7],
     [0, 0, 8, 9, 8],
     [0, 0, 7, 6, 5]]

谢谢

【问题讨论】:

  • 在字符串周围加上引号会死吗?让复制和运行变得更加困难。
  • 最好的方法,显然是尝试编写解决方案。事实上,你应该尝试一下。或者至少显示你尝试了什么,它在哪里不起作用以及你的确切问题是什么。我们帮助您解决您的代码问题,一般来说我们不提供完整的解决方案。
  • 您好帕特里克,感谢您的回复。我从头开始制作这个解决方案没有问题,但我正在寻找一个能做到这一点的 numpy 函数,而不是重新发明轮子。

标签: python arrays numpy matrix


【解决方案1】:

如果您希望进行许多线性代数运算,NumPy/SciPy 将是您的朋友。对于创建块对角矩阵的特殊问题,scipy.linalg.block_diag 节省了时间:

In [14]: from scipy.linalg import block_diag

In [16]: A = [[1, 2],
    ...:      [3, 4]]
    ...:

In [17]: B = [[5, 6, 7],
    ...:      [8, 9, 60],
    ...:      [10, 20, 0]]
    ...:

In [18]: block_diag(A, B)
Out[18]:
array([[ 1,  2,  0,  0,  0],
       [ 3,  4,  0,  0,  0],
       [ 0,  0,  5,  6,  7],
       [ 0,  0,  8,  9, 60],
       [ 0,  0, 10, 20,  0]], dtype=int32)

否则(编辑:注意原始形式的问题实际上并未指定所需的解决方案涉及 NumPy),如果您只想使用普通 Python 进行此操作,假设所有块都是方形的,您可以执行类似

[a + [0]*len(B) for a in A] + [[0]*len(A) + b for b in B]

【讨论】:

  • 谢谢。 “scipy.linalg.block_diag()”是我要找的。​​span>
【解决方案2】:

您可以开发自己的程序来做到这一点,应该不会太难。

以下是一些开始步骤:

  1. 在 A 的所有元素中前附加 0,在 B 的所有元素中后附加 0,以使它们的长度相等。

  2. 然后只需在结果矩阵中填写 A 和 B 的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 2021-10-29
    • 2017-10-12
    • 1970-01-01
    • 2012-08-14
    • 2017-05-18
    • 1970-01-01
    相关资源
    最近更新 更多