Точечный продукт между скудной разреженной матрицей и массивом с нулевыми значениями дает значение ValueError - PullRequest
0 голосов
/ 20 апреля 2019

Я пытаюсь вычислить скалярное произведение между матрицей разбора scipy и массивом numpy.

Сначала я использовал матрицу numpy, которую вы можете увидеть в следующем коде:

def power_iteration(matrix, n):
    b_k = np.random.rand(matrix.shape[1])
    for _ in range(n):
        b_k = np.dot(matrix, b_k)

    return b_k 

Здесь матрица является пустой матрицей, и ошибки не возникает.

Если вы передаете скудную разреженную матрицу в качестве параметра, возникает следующая ошибка: ValueError: shape (6762,6762) и (1,6762) не выровнен: 6762 (dim 1)! = 1 (dim 0)

Я изменил

b_k = np.random.rand(matrix.shape[1])

на

b_k = np.random.rand(matrix.shape[1], 1)

, что делает точечное произведениеработать, но не возвращает правильную форму b_k.Мне нужна форма: (6762,)

Редактировать: до сих пор я пытался изменить форму так:

b_k = np.reshape(b_k, (matrix.shape[1],))

, но это преобразует форму (6762, 1) в (1, 6762), вместо (6762,)

Есть советы?Спасибо!

1 Ответ

0 голосов
/ 20 апреля 2019

Похоже, что для использования np.dot на разреженной матрице вам необходимо сначала преобразовать ее в плотную матрицу с помощью matrix.toarray(). Также см. https://docs.scipy.org/doc/scipy/reference/sparse.html#matrix-vector-product

...