【问题标题】:Python - Divide each row by a vectorPython - 将每一行除以一个向量
【发布时间】:2022-01-17 19:25:00
【问题描述】:

我有一个 10x10 矩阵,我想用一个向量的元素来划分矩阵的每一行。

例如: 假设我有一个 3x3 矩阵

1 1 1
2 2 2
3 3 3

还有一个向量[1, 2, 3]

那么这就是我想做的操作:

1/1 1/2 1/3
2/1 2/1 2/3
3/1 3/2 3/3

即将行的元素除以向量的元素(一个python列表)

我可以使用 for 循环来做到这一点。但是,有没有更好的方法在 python 中执行此操作?

【问题讨论】:

  • 我想矩阵和向量是指numpy数组?
  • 一个numpy矩阵和一个python列表作为向量。
  • 如果 a 是您的数组,v 是您的列表,则使用 a/np.array(v)。我对这个问题投了反对票,因为你似乎没有尝试过任何事情。

标签: python arrays numpy numpy-ndarray


【解决方案1】:

第一个源数组应该被创建为 Numpy 数组:

a = np.array([
    [ 1, 1, 1 ],
    [ 2, 2, 2 ],
    [ 3, 3, 3 ]])

你不需要重塑除数数组(它可以是一个一维数组, 与您的源数据示例一样):

v = np.array([1, 2, 3])

把它们分开:

result = a / v

结果是:

array([[1.        , 0.5       , 0.33333333],
       [2.        , 1.        , 0.66666667],
       [3.        , 1.5       , 1.        ]])

【讨论】:

    【解决方案2】:

    你应该研究一下 numpy 中的广播。对于您的示例,这是解决方案:

    a = np.array([[1, 1, 1], [2, 2, 2], [3, 3, 3]])
    b = np.array([1, 2, 3]).reshape(1, 3)
    c = a / b 
    print(c)
    >>> [[1.         0.5        0.33333333]
         [2.         1.         0.66666667]
         [3.         1.5        1.        ]]
    

    【讨论】:

    • 似乎不需要重塑。
    • 在这种情况下显然不是,刚刚检查过。感谢您的意见。
    猜你喜欢
    • 1970-01-01
    • 2013-11-05
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    相关资源
    最近更新 更多