scipy.sparse для numpy.random_multivariate_normal - PullRequest
2 голосов
/ 03 апреля 2019

Я хотел сэкономить немного памяти и подумал, что создам scipy.sparse матрицу идентичности (dim исчисляется тысячами, не страшно, но и не скромно).Обратите внимание, что его форма проходит assert:

cov = sigma_0 * sparse.identity(dim, dtype=np.float32)
assert (dim, dim) == cov.shape
result = np.random.multivariate_normal(mu, cov)
E   ValueError: cov must be 2 dimensional and square

Следующее, однако, прекрасно работает:

cov = sigma_0 * np.identity(dim, dtype=np.float32)
assert (dim, dim) == cov.shape
result = np.random.multivariate_normal(mu, cov)

Я где-то пропустил, в документах, чтобы сказать, что разреженные ковариационные матрицы, как ожидают, терпят неудачу с ValueError?

1 Ответ

3 голосов
/ 03 апреля 2019

Здесь происходит то, что в np.random.multivariate_normal входной массив преобразуется в массив:

cov = np.array(cov)

, что в итоге приводит к созданию скалярного массива dtype object начиная с numpyничего не знает о разреженных матрицах.

In [3]: cov = sparse.identity(100, dtype=np.float32)

In [4]: cov.shape
Out[4]: (100, 100)

In [5]: np.array(cov)
Out[5]: 
array(<100x100 sparse matrix of type '<type 'numpy.float32'>'
        with 100 stored elements (1 diagonals) in DIAgonal format>, dtype=object)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...