Я пытаюсь вычислить точечный продукт между 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
Здесь матрица представляет собой матрицу numpy, и ошибки не возникает.
Если вы передаете scipy разреженную матрицу в качестве параметра, возникает следующая ошибка: ValueError: формы (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,)
Какие-нибудь советы? Спасибо!
b_k
is - это 1dndarray
или 2d разреженная матрица? Разреженная матрица всегда равна 2d. Что дает точка с такой матрицей? - person hpaulj   schedule 20.04.2019type
иdtype
уb_k
после одного скалярного произведения? Еслиmatrix
является разреженным, тогдаmatrix.dot(b_k)
иnp.dot(matrix.b_k)
будут создавать разные объекты. Смешивать разреженный и плотный массив нужно осторожно. И если промежуточнаяb_k
является матрицейnp.matrix
илиsparse
, ее нельзя преобразовать в 1d. - person hpaulj   schedule 20.04.2019