Объедините два массива в матрицу с помощью функции с двумя аргументами - PullRequest
0 голосов
/ 19 ноября 2018

Грубо говоря, я хочу преобразовать этот (ненулевой) цикл for:

N = len(left)
M = len(right)
matrix = np.zeros(N, M)
for i in range(N):
  for j in range(M):
    matrix[i][j] = scipy.stats.binom.pmf(left[i], C, right[j])

Это что-то вроде точечного продукта, но математически, конечно, не точечный продукт.Как бы я обычно векторизовал или сделал что-то вроде этого питонического / нумфитонического?

1 Ответ

0 голосов
/ 19 ноября 2018

scipy.stats.binom.pmf уже векторизовано. Тем не менее, вы должны broadcast свои данные, чтобы получить желаемый результат.

broadcast_out = scipy.stats.binom.pmf(left[:, None], C, right)

Валидация

np.random.seed(314)
left = np.arange(5, dtype=float)
right = np.random.rand(5)
C = 5

broadcast_out = scipy.stats.binom.pmf(left[:, None], C, right)

N = len(left)
M = len(right)
matrix = np.zeros((N, M))
for i in range(N):
  for j in range(M):
    matrix[i][j] = scipy.stats.binom.pmf(left[i], C, right[j])

print(np.array_equal(matrix, broadcast_out))

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