2014-11-01 25 views
8

Tôi đang cố gắng triển khai Naive Gauss và nhận được lỗi loại toán hạng không được hỗ trợ khi thực hiện. Output:LoạiError: loại toán hạng không được hỗ trợ (s) cho -: 'list' và 'list'

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' 
>>> 

Đây là mã

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]]) 
+0

Đây là dòng sự cố của bạn: 'b [hàng] = b [hàng] -xmult * b [cột]' hàng là danh sách và b [cột] là danh sách, vì vậy bạn đang cố gắng để trừ một danh sách từ một danh sách khác, mà (như đầu ra lỗi cho bạn biết) không phải là một hoạt động được hỗ trợ. –

+0

Cảm ơn @JonKiparsky, điều đó thực sự hữu ích – Ledruid

Trả lời

14

Bạn không thể trừ một danh sách từ một danh sách.

>>> [3, 7] - [1, 2] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unsupported operand type(s) for -: 'list' and 'list' 

Cách đơn giản để làm điều đó là sử dụng numpy:

>>> import numpy as np 
>>> np.array([3, 7]) - np.array([1, 2]) 
array([2, 5]) 

Bạn cũng có thể sử dụng danh sách hiểu, nhưng nó sẽ đòi hỏi thay đổi mã trong hàm:

>>> [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]])) 
+0

Cảm ơn @falsetru, tôi đã sử dụng mảng có nhiều mảng và nó hoạt động – Ledruid

+0

@Ledruid, Chào mừng bạn đến với Stack Overflow! Nếu điều này giúp bạn, bạn có thể nói cho cộng đồng biết bằng cách [chấp nhận câu trả lời] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235). – falsetru

2

Sử dụng Set in Pyth trên

>>> a = [2,4] 
>>> b = [1,4,3] 
>>> set(a) - set(b) 
set([2]) 
Các vấn đề liên quan