【问题标题】:Copying every row of one matrix to every row of another empty matrix in python将一个矩阵的每一行复制到python中另一个空矩阵的每一行
【发布时间】:2019-04-13 08:10:18
【问题描述】:

如何对矩阵中的每一行执行操作并将其复制到另一个矩阵? data1 和 data2 是大小假设为 n*4 的矩阵,我需要为每个元素加 1。

import numpy as np
import sys
data1=np.matrix('1 1 1 1;2 2 2 2;3 3 3 3;4 4 4 4')
row1=np.matrix('1 1 1 1')
for row in data1:
    row=row+row1
    print(row)
//The results is as below
//[[2 2 2 2]]
//[[3 3 3 3]]
//[[4 4 4 4]]
//[[5 5 5 5]]

第二个矩阵 data2 应该包含行操作后矩阵 data1 中的所有元素。 print 语句给出了预期的结果,但是我如何将这些行复制到一个新的矩阵中?

【问题讨论】:

  • 能否请您使用适当的缩进和内部代码块格式化代码
  • for i in alist: i = i+1 不会更改 alist 中的值。这是一个基本的 Python 迭代问题。
  • 小修正不是1而是行矩阵。
  • 请为data1 和data2 提供示例输入(使用正确的python 语法)
  • row=row+row1 仍然不会更改源 data1 中的 row。接受的答案避免了所有迭代,这很好。但是您的迭代问题是一个基本的 Python 问题,您迟早需要了解。

标签: python numpy matrix multidimensional-array


【解决方案1】:

假设您使用的是 numpy:

import numpy as np

data1 = np.array([[1,2,3,4],
                  [5,6,7,8]])

mu = [1,1,1,1]

data2 = data1 + mu

或者,如果您实际上只是想将1 添加到每个元素:

data2 = data1 + 1

或者如果data1 只是一个列表列表,那么使用嵌套列表推导:

mu = [1,1,1,1]
data1 = [[1,2,3,4],
         [5,6,7,8]]
data2 = [[r+m for r,m in zip(row,mu)] for row in data1]

【讨论】:

  • 如果您可以摆脱使用 numpy,这是正确的解决方案。它速度更快,并且对于此类操作更简单。除了数组类型之外,numpy 还有一个遵循矩阵乘法规则的矩阵类型。因此,如果 data1*data2 是数组,它们将逐个元素相乘,但如果您选择 np.matrix 类型 data1*data2.T 将转置 data2 以获得矩阵乘法 (2,4) * (4,2) 的正确形状然后做矩阵乘法。
  • @velotron 但您不应该再使用矩阵类型,即使对于线性代数也是如此。您可以使用数组进行矩阵乘法:data1 @ data2.T
  • @Dan 感谢您指出这一点。矩阵类型确实有其他有用的语法。例如 data2.I 将返回矩阵的逆矩阵。您可以使用 numpy.linalg.inv(x) 对数组执行相同的操作,但 .I 表示法很好。但是,直到matrix is deprecated。谢谢!
猜你喜欢
  • 2017-07-23
  • 2019-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
相关资源
最近更新 更多