【问题标题】:Matrices generation in PythonPython中的矩阵生成
【发布时间】:2023-03-24 11:10:01
【问题描述】:

我想从 python 中的其他两个矩阵生成一个矩阵。所以我想做的是考虑第一个矩阵的第一行并将其放入新矩阵中,然后相同但来自第二个矩阵。下一步将移动到两个矩阵的第二行,依此类推。

输入:

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

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

应该产生输出:

C = [[1, 1, 1, 1, 1], [6, 6, 6, 6, 6,], [2, 2, 2, 2, 2], [7, 7, 7, 7, 7], [3, 3, 3, 3, 3], [8, 8, 8, 8, 8] ... [0, 0, 0, 0, 0]]

如果可能我不想使用任何循环。

【问题讨论】:

  • 这不是有效的 Python 语法。输入是什么?期望的输出是什么?你试过什么?为什么不想要循环?
  • 您好,欢迎来到 StackOverflow。请花一些时间阅读帮助页面,尤其是名为"What topics can I ask about here?""What types of questions should I avoid asking?" 的部分。更重要的是,请阅读the Stack Overflow question checklist。您可能还想了解Minimal, Complete, and Verifiable Examples
  • 看起来像 matlab。你是说matlab吗?
  • 是的,我知道,只是举个例子。从示例本身可以看出,“输入”将是使用 numpy.matrix 生成的两个矩阵 A 和 B,所需的输出是矩阵 C。老实说,我是 python 新手,所以没有尝试太多。我尝试过的是这样的: C = A[0::1],B[0::1] 没有循环的原因只是为了让它尽可能高效。

标签: python numpy matrix


【解决方案1】:

您可以像这样在 numpy 中执行此操作:

import numpy as np

A = np.array([[1, 1, 1, 1, 1], [2, 2, 2, 2, 2], [3, 3, 3, 3, 3], [4, 4, 4, 4, 4], [5, 5 ,5 ,5, 5]])

B = np.array([[6, 6, 6, 6, 6], [7, 7, 7 ,7 ,7], [8, 8, 8, 8, 8], [9, 9, 9, 9, 9], [0, 0, 0, 0, 0]])

print np.hstack((A, B)).reshape((-1, A.shape[1]))

请注意,我已使语法对创建数组有效。

这会产生:

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

这里发生的事情是np.hstack 创建了一个中间数组,如下所示:

print np.hstack((A, B))

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

这是AB 的水平串联。

现在,我将 reshape 使用 .reshape((-1, A.shape[1])) 放入最终矩阵。因为 numpy 数组默认在row-major order 中,所以最终数组中的每一对相邻行都是由该中间数组的一行形成的。

(另见解决方案here

【讨论】:

  • 谢谢,这真的很有帮助。一个小问题是列表对象没有属性形状。对此能做些什么?
  • 此代码将全部工作。最后,您将拥有 numpy 数组而不是列表。请注意,我将 python 列表转换为 numpy 数组 --- 这是重要的一步!
  • 再次感谢,我尝试使用 vsplit 来拆分我的矩阵,这就是它不起作用的原因。
猜你喜欢
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 1970-01-01
  • 2023-02-01
  • 1970-01-01
  • 2015-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多