Я хочу применить операцию точечного произведения к матрице m (2,6) и вектору v (6,)
Результирующий вектор должен иметь форму (6,)
Когда я сам реализую логику в python, я получаю требуемый выше результат .. т.е. вектор с размером 6. Однако, если я использую np.dot (m, v), он дает те же результаты, но удаляет лишние нули
Почему это происходит? Пожалуйста, помогите. код ниже
def vector_matrix_multiplication_using_numpy(m, v):
'''
this is where we multiply a matrix with a vector
remember it is important that m.shape[1] == v.shape[0]
also m is a 2D tensor
resultant will be a vector of the shape
(m.shape[0])
'''
assert len(m.shape) == 2
assert len(v.shape) == 1
assert m.shape[1] == v.shape[0]
return np.dot(m,v)
def vector_matrix_multiplication_using_python(m, v):
'''
this is where we multiply a matrix with a vector
remember it is important that m.shape[1] == v.shape[0]
also m is a 2D tensor
resultant will be a vector of the shape
(m.shape[0])
'''
assert len(m.shape) == 2
assert len(v.shape) == 1
assert m.shape[1] == v.shape[0]
z = np.zeros((m.shape[1])).astype(np.int32)
for i in range(m.shape[0]):
z[i] = vector_multiplication_using_python(m[i, :],v)
return z
m = np.random.randint(2,6, (3,7))
v = np.random.randint(5,17, (7))
print(vector_matrix_multiplication_using_numpy(m,v),\
vector_matrix_multiplication_using_python(m, v))
вывод такой, как показано ниже:
[345 313 350] [345 313 350 0 0 0 0]
EDIT:
я ошибся. матрица с векторным умножением работает как показано ниже
m = (n, p) форма
v = (p,) форма
результирующий вывод v = (n) формы
это конкретное изменение в коде исправило проблему:
z = np.zeros((m.shape[0])).astype(np.int32)