1

これはスタックオーバーフローで打ち負かされたようですが、どの質問も私の問題に一致していないようです。とにかく、コードにまっすぐ。

これはEdge.pyです

from __future__ import division
import sys
from numpy import *


class EdgeList:
    def __init__(self, mat):
        self.id1 = mat[:,0]
        self.id2 = mat[:,1]
        self.value = mat[:,2]
    def is_above(self):
        return self.value>average(self.value)
    def stats(self):
        pass #omitted; too long and irrelevant here.

これはAHsparse.pyです

from __future__ import division

import sys
from numpy import *
from Edge import EdgeList

class AHvector:
    def __init__(self, mat):
        self.el = EdgeList(mat)
    def multiply(self, other):
        v=zeros(max(len(self.el.val), len(other.el.val)))
        for index in self.id1:
            v[index] = self.el.val[index] * other.el.val[index]
        return v

これはいくつかのテストコードです (他のテストはパスします)

import sys
from numpy import *
from Edge import EdgeList
from AHsparse import AHvector

testmat =loadtxt('test.data', delimiter=';')
st = EdgeList(testmat)
stv = AHvector(st)
stv = stv.multiply(stv)
print(stv)

エラーはクラス AHvector のinitメソッドで発生しますが、Edge.py にコールバックします。

Traceback (most recent call last):
  File "/Users/syntaxfree/Dropbox/nina/nina lives in objects/sparse_test.py", line 8, in <module>
    stv = AHvector(st)
  File "/Users/syntaxfree/Dropbox/nina/nina lives in objects/AHsparse.py", line 9, in __init__
    self.el = EdgeList(mat)
  File "/Users/syntaxfree/Dropbox/nina/nina lives in objects/Edge.py", line 7, in __init__
    self.id1 = mat[:,0]
AttributeError: EdgeList instance has no attribute '__getitem__'
[Finished in 0.6s with exit code 1]

他に追加することはありませんが、残念ながら、EdgeList を独自に初期化し、他のテスト コードで stats メソッドを実行できることを除けば、なぜこれが機能しないのか完全に混乱しています。

4

1 に答える 1

3

走るとき

 stv = AHvector(st)

stエッジリストです。次に、AHvector は のinitEdgelist を作成しようとしstます。多分AHvectorは述べるべきです

 self.el = mat # Instead of EdgeList(mat)?

それとも、AHvector は を受信するはずではなくst、むしろtestmat?

于 2012-09-17T13:46:44.473 に答える