Это то, что вам нужно? Если это так, я думаю, что это быстрее, чем любая операция, включающая условную оценку (а также использование np.exp()
, как показал Марк Снайдер - спасибо Марку).
import numpy as np
from math import e
M = np.random.randint(2, size=(1024,1024)) * 2 - 1
a = (1/e - e) / 2
b = (1/e + e) / 2
E = M * a + b
print(M[:3,:3])
# [[-1 1 1]
# [-1 -1 1]
# [-1 1 -1]]
print(E[:3,:3])
# [[2.71828183 0.36787944 0.36787944]
# [2.71828183 2.71828183 0.36787944]
# [2.71828183 0.36787944 2.71828183]]
На самом деле, линейное преобразование, подобное этому может использоваться в любое время, когда матрица со значениями p
и q
должна быть преобразована в матрицу со значениями r
и s
. Нужно только решить систему
r = p * a + b
s = q * a + b
для a
и b
. Типовое решение c
a = (r - s) / (p - q)
b = r - p * a = s - q * a = (p * s - q * r) / (p - q)