2015-09-28 4 views
0

Вышеупомянутая функция не работает, когда я использую линейный оператор абстрактного/черного ящика. Вот минимальный пример:scipy.sparse.linalg.eigs не работает с абстрактным линейным оператором

import numpy as np 
import scipy.sparse.linalg as la 

# Just generate an n X n matrix 
n = 9 
a = np.random.normal(size = n * n) 
a = a.reshape((n,n)) 

# A is a black-box linear operator 
def A(v): 
    global a 
    return np.dot(a, v) 

# If you don't define a shpae for A you get an error 
A.shape = (n,n) 

# This works 
success = la.eigs(a) 

# This throws an error. 
failure = la.eigs(A)  

Это происходит питон 3.2.2 с SciPy 0.13.3, а также для питона 2.7.3 с SciPy 0.16.0.

Сообщение об ошибке:

File "/home/daon/.local/lib/python2.7/site-packages/scipy/sparse/linalg/eigen/arpack/arpack.py", line 1227, in eigs 
    matvec = _aslinearoperator_with_dtype(A).matvec 
    File "/home/daon/.local/lib/python2.7/site-packages/scipy/sparse/linalg/eigen/arpack/arpack.py", line 885, in _aslinearoperator_with_dtype 
    m = aslinearoperator(m) 
    File "/home/daon/.local/lib/python2.7/site-packages/scipy/sparse/linalg/interface.py", line 682, in aslinearoperator 
    raise TypeError('type not understood') 
TypeError: type not understood 

Любая помощь будет оценена.

ответ

0

ОК, это смущают: просто определить A по-разному:

def f(v): 
    global a 
    return np.dot(a, v) 

A = la.LinearOperator(a.shape, f) 

это делает все работы просто отлично.

 Смежные вопросы

  • Нет связанных вопросов^_^