умножение матрицы (N, N) на вектор (V), чтобы результат имел форму (N, N, V) - PullRequest
0 голосов
/ 29 мая 2020

Привет - я python новичок и хотел бы выяснить следующее:

Я хочу умножить матрицу формы (n, n) на вектор формы ( v), так что результат имеет форму (n, n, v).

Мой код выглядит примерно так, но это далеко не элегантно.

def D(x,y,B,n): 
    # shape of x,y is (n,n) # shape of B is (v)

    a = np.ndarray(shape = (n,n,1), dtype = float)
    b = np.ndarray(shape = (n,n,1), dtype = float)

    a = np.arctan2(y, x)*(B[0])/(2.*math.pi)    
    b = np.arctan2(y, x)*(B[1])/(2.*math.pi)
    c, d = ...

    return np.asarray([a,b,c,d]).T

x и y - это матрицы сетки и представляют радиус.

Любая помощь приветствуется! Спасибо!!

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

попробуйте использовать это, это самый быстрый способ, который я знаю массив формы [n, n, 1], который может транслироваться с помощью b

широковещательный массив формы [n, n, 1] с массивом формы [v] создает массив формы [n, n, v]

если A имели форму [a, b, c]. A[..., np.newaxis] изменил бы его на [a, b, c, 1]

0 голосов
/ 29 мая 2020

Вы могли бы сделать: def D (x, y, B, n): # форма x, y is (n, n) # форма B is (v)

a = np.ndarray(shape = (n,n,1), dtype = float)
b = np.ndarray(shape = (n,n,1), dtype = float)

c = np.arctan2(y, x) * B[None, None, :]
# c.shape == (n, n, v)


return c.T
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...