Numpy .dot зависает моя программа, я предполагаю, что это проблема с памятью - PullRequest
1 голос
/ 04 августа 2020

У меня есть два массива numpy: форма A (512,) и B (3000,512). Один вызов функции C = np.dot (B, A), и моя программа зависает без ошибок. Мои python 3.7.3 и numpy 1.16.2.

Но этот код работает хорошо, если я вызываю c = np.dot (B, A) manual с подходящим вводом или длиной B около 50

Не знаю, какая разница между двумя способами звонка.

Ответы [ 2 ]

0 голосов
/ 10 августа 2020

Я нашел ответ. Это из-за ограничения памяти. Моя программа при запуске занимает 20 ГБ ОЗУ и когда numpy требуется больше памяти для ее работы, система зависает без каких-либо ошибок или предупреждений, но когда я вызываю эту функцию вручную, она вызывает другой процесс и получает больше ОЗУ для своей работы.

0 голосов
/ 05 августа 2020

Когда сначала идет A, вам нужно использовать транспонирование B. Интересно, что мне не нужно было менять форму A. Мне это не кажется последовательным, но это работает.

import numpy as np
A = np.array([i for i in range(512)])
B = np.random.rand(3000, 512)

C1 = B.dot(A)      # 3000 rows, 512 

B = B.transpose()      # 512 rows, 3,000 columns
C2 = A.dot(B)
C2 = C2.transpose()    # 3,000 rows, 512 columns

print(np.all(np.equal(C1, C2))) # Verify that the result is the same
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...