2015-12-15 66 views
-2

我有一些問題。我想從另一個列表中減去一個列表。爲此,我使用從Python數組到numpy數組的轉換。但它失敗了。 例如,wealthRS是列表。我創建一個副本: wealthRSCopy = wealthRS 然後我想抽象,但它是錯誤的(unsuppoerted operand types) 這裏是截圖。 enter image description herePython Numpy不受支持的操作數類型'list' - 'list'

+3

請發帖實際的代碼和輸出,截圖沒多大用處。 – SiHa

+0

你的意思是矢量差異? http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.subtract.html – msw

回答

1

編輯與答案:

您最初的名單有列表作爲它們的元素。這些列表的長度不同,因此將NumPy數組轉換爲dtype對象的數組,即數組的元素是列表。看到這裏:https://stackoverflow.com/a/33987165/4244912

當減去NumPy數組,它做元素減法,也就是說,它從另一個元素的相應元素減去一個數組的元素(在你的情況是列表),這就是爲什麼你得到你的錯誤信息(例如,類型'列表'不支持減法)。

簡單的例子:

In [1]: import numpy as np 

In [2]: A=np.array([[1,2],[],[1,2,3,4]]) 

In [3]: A[0] 
Out[3]: [1, 2] 

In [4]: A[0].append(3) #<-- The first element is a list! 

In [5]: A 
Out[5]: array([[1, 2, 3], [], [1, 2, 3, 4]], dtype=object) #<-- The first element (a list) has changed. 

我在這裏重現你的錯誤:

In [35]: B, C = np.array([[1,2],[3]]), np.array([[4,5],[6]]) # Note the differing sizes of the nested lists. 

In [36]: C-B 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-36-f4554df570db> in <module>() 
----> 1 C-B 

TypeError: unsupported operand type(s) for -: 'list' and 'list' 

所以你需要通過使每個列表與最初的名單,以確保您可以三立投你的列表,以數組等長。然後他們應該被轉換爲NumPy數組,並且使用float類型,並按照您期望的方式行事。

原帖

我不認爲你的代碼中創建一個副本,它看起來像你還在減去列表,而不是numpy的陣列。

如果wealthRS是一個列表,然後wealthRSCopy = wealthRS創建我所謂的淺拷貝:列表指的是相同的元素,所以更改一個會改變另一個。

例如:

In [1]: a = [1,2,3] 

In [2]: b = a 

In [3]: b[0] = 10 # change the first item in 'b' 

In [4]: b 
Out[4]: [10, 2, 3] 

In [5]: a # <-- 'a' has changed too! 
Out[5]: [10, 2, 3] 

之一來創建它們是彼此獨立的拷貝方式是通過使用切片。

In [6]: c = a[:] # <-- slice containing the whole list 

In [6]: c[0] = 15 

In [7]: a 
Out[7]: [10, 2, 3] 

In [8]: c 
Out[8]: [15, 2, 3] 

編輯:對於你的其餘問題:你可以試試這個給我嗎?

In [1]: import numpy as np 

In [2]: a, b = [[[1]]], [[[3]]] 

In [3]: np.array(b) - np.array(a) 
Out[3]: array([[[2]]]) 

我不明白爲什麼你的減法不工作,除非數組元素是列表本身,但我不知道如何發生。

相關問題