e.H
, e.A
, e.T
sind Pseudoeigenschaften des dünn besetzten Matrixobjekts.
shape
ist eine Eigenschaft. In sparse.base.py
finde ich
shape = property(fget=get_shape, fset=set_shape)
während die dict
nur enthält:
In [121]: e.__dict__
Out[121]:
{'_shape': (2, 2),
'data': array([[ 1., 1.]]),
'format': 'dia',
'maxprint': 50,
'offsets': array([0])}
get_shape
wahrscheinlich greift _shape
. set_shape
begrenzt wahrscheinlich unsere Fähigkeit zu ändern _shape
.
Ich kenne keine saubere Methode, alle definierten Eigenschaften für ein Objekt wie dieses zu finden. Im Idealfall sollten sie in der Dokumentation aufgeführt sein, aber sparse
Dokumentation ist nicht ideal.
Es gibt eine e.getH
Methode, die die gleiche Sache wie e.H
zurückkehrt, so dass ich vermute, es ist ein Stück Code, wahrscheinlich in einigen Super
H = property(fget=getH)
Nope - in sparse.base.py
finde ich eine Neudefinition von __getattr__
, so es ist ein ganz anderer Mechanismus (nicht Eigentum und nicht __dict__
):
def __getattr__(self, attr):
if attr == 'A':
return self.toarray()
elif attr == 'T':
return self.transpose()
elif attr == 'H':
return self.getH()
elif attr == 'real':
return self._real()
elif attr == 'imag':
return self._imag()
elif attr == 'size':
return self.getnnz()
else:
raise AttributeError(attr + " not found")
In ipython
ich dies mitholen kannoder sparse.base??
.
getattr
kann verwendet werden, alle holen diese Attribute und Eigenschaften (und Verfahren)
In [161]: getattr(e,'shape')
Out[161]: (2, 2)
In [162]: getattr(e,'_shape')
Out[162]: (2, 2)
In [163]: getattr(e,'H')
Out[163]:
<2x2 sparse matrix of type '<type 'numpy.float64'>'
with 2 stored elements in Compressed Sparse Column format>
In [164]: getattr(e,'transpose')
Out[164]:
<bound method dia_matrix.transpose of <2x2 sparse matrix of type '<type 'numpy.float64'>'
with 2 stored elements (1 diagonals) in DIAgonal format>>
Mit dem inspect
Modul I eine Liste von members
erhalten kann, z.B.
[i[0] for i in inspect.getmembers(e)]
aber das noch nicht, diese speziell diejenigen in der __getattr__
Methode definiert auflistet.
Sie haben möglicherweise die Methode '__dir__' überschrieben. Ich benutze manchmal 'help (e)' und 'e .__ dict__'. Ich bin mir über meine Antwort nicht sicher, also überlasse ich es als Kommentar und lasse andere weiter ausführen. – Bahrom