【问题标题】:How can I extract the sign values from a matrix into a new matrix如何将矩阵中的符号值提取到新矩阵中
【发布时间】:2019-02-02 05:47:44
【问题描述】:

我有一个矩阵:

>    A[-1 0 1 0.5] 
>    [-0.2 0.8 1 -1] 
>     [0.4 0.8 1 -0.1] 
>     [-0.6 0.4 -1 1]

我想从中提取一个子矩阵..所以我想要程序做的是制作一个矩阵来保存符号......就像这样:

B[-1 +1 +1 +1]
[-1 +1 +1 -1]
[+1 +1 +1 -1]
[-1 +1 -1 +1]

和一个包含元素值的矩阵 C

    C[1 0 1 0.5] 
    [0.2 0.8 1 1] 
     [0.4 0.8 1 0.1] 
     [0.6 0.4 1 1]

所以当B和C相乘时,它们组成矩阵A。

【问题讨论】:

  • 请添加你写的代码来解决上述问题
  • 我还没有使用代码。我正在考虑使用 for 循环来循环每个元素并检查符号以放入新矩阵。但我想知道是否有更简单的方法@Polaris000

标签: python numpy matrix matrix-multiplication submatrix


【解决方案1】:

将 A 变成 numpy 数组并使用 numpy.sign 函数。这更容易,因为 numpy 会为您执行循环。

import numpy
A=numpy.array([[-1,0,1,0.5],[-0.2 0.8 -1, 1],...])
B=numpy.sign(A)
C=A*B

【讨论】:

    【解决方案2】:

    使用 numpy 的 signabs 函数,如下所示

    import numpy as np
    A=np.array([[-1,0,1,0.5],[-0.2,0.8,1,-1], [0.4,0.8,1,-0.1], [-0.6,0.4,-1,1]])
    B=np.sign(A)
    C=np.abs(A)
    print(B*C == A)
    

    【讨论】:

    • 要处理带符号的零,请使用B = -2 * np.signbit(A) + 1
    【解决方案3】:

    您可以使用 numpy 中的 absolutesign 方法。

    import numpy as np
    
    a = np.array([[-1, 0, 1, 0.5], [-0.2, 0.8, 1, -1], [0.4, 0.8, 1, -0.1], [-0.6, 0.4, -1, 1]])
    b = np.sign(a)
    c = np.absolute(a)
    

    所以 b 是:

    array([[-1.,  0.,  1.,  1.],
           [-1.,  1.,  1., -1.],
           [ 1.,  1.,  1., -1.],
           [-1.,  1., -1.,  1.]])
    

    而 c 是:

    array([[1. , 0. , 1. , 0.5],
           [0.2, 0.8, 1. , 1. ],
           [0.4, 0.8, 1. , 0.1],
           [0.6, 0.4, 1. , 1. ]])
    

    这里唯一的区别是元素 0 的符号被认为是 0 而不是你想要的 +1。
    编辑
    正如一个有用的评论中提到的,要获得矩阵 b 的输出,如您所愿(0 的符号为 +1),您可以这样做:

    b = -2 * np.signbit(a) + 1
    

    【讨论】:

    • 注意 abs() 和 absolute() 做同样的事情
    • b = -2 * np.signbit(a) + 1
    猜你喜欢
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    相关资源
    最近更新 更多