2014-11-01 31 views
8

Naive Gauss'u uygulamaya çalışıyorum ve desteklenmeyen işlenen türü hatası gerçekleştirmeye çalışıyorum. Çıktı:TypeError: - 'liste' ve 'liste' için desteklenmeyen işlenen türü (türleri)

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

Bu Bir listeden bir liste çıkarma olamaz kod

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

Bu sizin sorun satırınız: 'b [satır] = b [satır] -xmult * b [sütun]' satır bir liste ve b [sütun] bir liste, yani Bir listeden diğerini çıkarmak için (hata çıkışı size bildirdiği gibi) desteklenen bir işlem değildir. –

+0

Teşekkürler @JonKiparsky, bu gerçekten yararlı oldu – Ledruid

cevap

14

olduğunu.

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

Ayrıca liste anlama kullanabilirsiniz, ancak bu işlev kodu değiştirmeden gerektirecektir:

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

Basit yolu numpy kullanıyor

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

Teşekkürler @falsetru, numpy dizi kullanılır ve – Ledruid

+0

@Ledruid, Stack Overflow Hoşgeldiniz! Eğer bu size yardımcı olduysa, topluma bunu [cevabı kabul ederek] söyleyebilirsiniz (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235). – falsetru

2

Pyth Set'te Kullan

>>> a = [2,4] 
>>> b = [1,4,3] 
>>> set(a) - set(b) 
set([2]) 
İlgili konular