【问题标题】:numpy - operations on whole matrixnumpy - 对整个矩阵的操作
【发布时间】:2014-01-26 07:36:56
【问题描述】:

假设我有一个 numpy 数组

a = np.array([[a11 a12 a13],
          [a21 a22 a23],
          [a31 a32 a33]])

我想返回以下结果:

np.array([[a11/a1 a12/a1 a13/a1],
          [a21/a2 a22/a2 a23/a2],
          [a31/a3 a32/a3 a33/a3]])

地点:

  a1 = np.sqrt(a11**2 + a12**2 + a13**2)
  a2 = np.sqrt(a21**2 + a22**2 + a23**2)
  a3 = np.sqrt(a31**2 + a32**2 + a33**2)

换句话说,我想将数组的每个元素除以其所属行的范数。

我已经编写了一些代码来执行此操作,但坦率地说,这很糟糕——我正在循环遍历数组的行,我知道这不是 numpy 的设计目的。我有一种感觉可以通过使用两个我不知道的 numpy 库调用来实现。

我想到的另一件事是:

a/np.reshape(np.linalg.norm(a,axis=1),(a.shape[0],1))

但我不确定这是否是一种特别有效的方法。有什么建议吗?

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:
    import numpy as np
    
    a = np.array([[11, 12, 13],
              [21, 22, 23],
              [31, 32, 33]], float)
    
    a / np.sum(a**2, 1, keepdims=True)**0.5
    

    【讨论】:

    • 需要sqrt而不是sum,sqrt好像没有方便的axis或者keepdims命令。
    • 我修改了答案,加了**0.5
    • 非常好的解决方案!谢谢
    猜你喜欢
    • 2016-11-30
    • 2022-08-05
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多