Код: Выделить всё
import numpy as np
a = np.array([[1, 0, 1], [1, 1, 0]], dtype=bool)
Я сделал несколько попыток:
Попытка 1
Код: Выделить всё
out1 = np.matmul(a, a.T)
print(out1)
Просто применяю np .matmul не работает из-за переполнения.
Попытка 2
Так я и придумал с идеей передать выходной массив np.uint64 в функцию: тоже не работает. Похоже, что сумма вычисляется с помощью логических значений, а затем приводится к uint64.
Код: Выделить всё
out2 = np.zeros((2, 2), dtype=np.uint64)
np.matmul(a, a.T, out=out2)
print(out2)
Попытка 3
Вычисление произведения строки*столбца вручную с последующим вызовом суммы работает: но это требует слишком много памяти, так как сохраняет все результаты произведения перед их суммированием.< /p>
Код: Выделить всё
out3 = (a[None,:, :] * a[:, None, :]).sum(axis=-1)
print(out3)
Попытка 4
Я попробовал привести массив перед вычислением: тоже работает. Но приведение входного массива занимает 64 раза больше памяти, и я предполагаю, что умножение занимает больше времени, если оно выполняется с помощью uint64, по сравнению с двумя логическими значениями.
Код: Выделить всё
out4 = np.matmul(a.astype(np.uint64), a.T)
print(out4)
Есть ли лучшее решение этой проблемы, которое я мог бы рассмотреть?
Подробнее здесь: https://stackoverflow.com/questions/791 ... n-in-numpy