Кронекер Сила разреженных матриц - PullRequest
0 голосов
/ 02 мая 2020

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

import numpy

from scipy import sparse

from scipy.sparse import coo_matrix

def SparseMatrixPower(A,p):
    if p == 1: 
        return(A)
    elif Mod(p,2):
        return(SparseMatrixPower(A,SparseMatrixProduct(A,A)), (p - 1) / 2)  
    else:
        return(SparseMatrixPower(SparseMatrixProduct(A,A), p / 2))

def SparseMatrixProduct(A,B):
        return(sparse.kron(A,B)+sparse.kronsum(A,B))

A=sparse.coo_matrix([[0,1,2],[1,1,2],[2,2,3]])
B=sparse.coo_matrix([[0,1,2],[1,1,2],[2,2,3]])
SparseMatrixProduct(A,B)
SparseMatrixPower(A,3)

Ниже выводится сообщение об ошибке:


ValueError Traceback (последний последний вызов) в () 19 B = sparse.coo_matrix ([[Integer (0) ), Целое число (1), Целое число (2)], [Целое число (1), Целое число (1), Целое число (2)], [Целое число (2), Целое число (2), Целое число (3)]]) 20 SparseMatrixProduct (A, B) ---> 21 SparseMatrixPower (A, целое число (11))

<ipython-input-7-9b98e47610f5> in SparseMatrixPower(A, p)
      9         return(A)
     10     elif Mod(p,Integer(2)):
---> 11         return(SparseMatrixPower(A,SparseMatrixProduct(A,A)), (p - Integer(1)) / Integer(2))
     12     else:
     13         return(SparseMatrixPower(SparseMatrixProduct(A,A), p / Integer(2)))

<ipython-input-7-9b98e47610f5> in SparseMatrixPower(A, p)
      6 
      7 def SparseMatrixPower(A,p):
----> 8     if p == Integer(1):
      9         return(A)
     10     elif Mod(p,Integer(2)):

/home/calc/SageMath/local/lib/python3.7/site-packages/scipy/sparse/base.py in __bool__(self)
    286             return self.nnz != 0
    287         else:
--> 288             raise ValueError("The truth value of an array with more than one "
    289                              "element is ambiguous. Use a.any() or a.all().")
    290     __nonzero__ = __bool__

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all().
...