Примерно такая работа:
x = np.array([1, 2, 3], ndmin=2)
y = np.array([1, 2, 3], ndmin=2)
cost_mat = x * y.T
cost_matrix is
array([[1, 2, 3],
[2, 4, 6],
[3, 6, 9]])
Давайте выберем оба решения с большими массивами:
x = np.random.rand(10000,1)
y = np.random.rand(10000,1)
def f(a, b):
return a * b
# Start timing here
cost_mat1 = np.zeros((x.shape[0], y.shape[0]))
for i in range(x.shape[0]):
for j in range(y.shape[0]):
cost_mat1[i, j] = f(x[i], y[j])
# Wall time: 2min 13s
Использование транспонирования намного быстрее :
# Start timing here
cost_mat2 = x * y.T
# Wall time: 395 ms
А затем проверьте, что
np.array_equal(cost_mat1, cost_mat2)
Возвращает true