Как я могу извлечь значения знака из матрицы в новую матрицу - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть матрица:

>    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.

Ответы [ 3 ]

0 голосов
/ 02 февраля 2019

Вы можете использовать методы absolute и sign от numpy.

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
0 голосов
/ 02 февраля 2019

Используйте функции Numpy sign и abs, как показано ниже

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)
0 голосов
/ 02 февраля 2019

Создайте 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
...