Ik probeer de Naive Gauss te implementeren en krijg de niet-ondersteunde operand-typefout bij uitvoering.
Uitgang:
execfile(filename, namespace)
File "/media/zax/MYLINUXLIVE/A0N-.py", line 26, in <module>
print Naive_Gauss([[2,3],[4,5]],[[6],[7]])
File "/media/zax/MYLINUXLIVE/A0N-.py", line 20, in Naive_Gauss
b[row] = b[row]-xmult*b[column]
TypeError: unsupported operand type(s) for -: 'list' and 'list'
>>>
Dit is de code
def Naive_Gauss(Array,b):
n = len(Array)
for column in xrange(n-1):
for row in xrange(column+1, n):
xmult = Array[row][column] / Array[column][column]
Array[row][column] = xmult
#print Array[row][col]
for col in xrange(0, n):
Array[row][col] = Array[row][col] - xmult*Array[column][col]
b[row] = b[row]-xmult*b[column]
print Array
print b
print Naive_Gauss([[2,3],[4,5]],[[6],[7]])
Antwoord 1, autoriteit 100%
Je kunt een lijst niet van een lijst aftrekken.
>>> [3, 7] - [1, 2]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'list' and 'list'
Een eenvoudige manier om dit te doen is door numpy
te gebruiken:
>>> import numpy as np
>>> np.array([3, 7]) - np.array([1, 2])
array([2, 5])
U kunt ook lijstbegrip gebruiken, maar hiervoor moet de code in de functie worden gewijzigd:
>>> [a - b for a, b in zip([3, 7], [1, 2])]
[2, 5]
>>> import numpy as np
>>>
>>> def Naive_Gauss(Array,b):
... n = len(Array)
... for column in xrange(n-1):
... for row in xrange(column+1, n):
... xmult = Array[row][column] / Array[column][column]
... Array[row][column] = xmult
... #print Array[row][col]
... for col in xrange(0, n):
... Array[row][col] = Array[row][col] - xmult*Array[column][col]
... b[row] = b[row]-xmult*b[column]
... print Array
... print b
... return Array, b # <--- Without this, the function will return `None`.
...
>>> print Naive_Gauss(np.array([[2,3],[4,5]]),
... np.array([[6],[7]]))
[[ 2 3]
[-2 -1]]
[[ 6]
[-5]]
(array([[ 2, 3],
[-2, -1]]), array([[ 6],
[-5]]))
Antwoord 2, autoriteit 42%
Set gebruiken in Python
>>> a = [2,4]
>>> b = [1,4,3]
>>> set(a) - set(b)
set([2])
Antwoord 3, autoriteit 2%
De bewerkingen die moesten worden uitgevoerd, vereisen numpy-arrays die zijn gemaakt via
np.array()
of kan worden omgezet van een lijst naar een array via
np.stack()
Zoals in het bovengenoemde geval worden er 2 lijsten ingevoerd als operanden, waardoor de fout wordt geactiveerd.
Antwoord 4
Deze vraag is beantwoord, maar ik denk dat ik ook een andere mogelijke oorzaak moet noemen. Dit is een direct gevolg van het tegenkomen van dezelfde foutmelding, maar om verschillende redenen. Als uw lijst(en) leeg zijn, wordt de bewerking niet uitgevoerd. controleer je code op inspringingen en typefouten