如果你開始x
和y
是一個元組列表,那麼很容易將它們轉換爲2D與NumPy陣列:
import numpy as np
x = np.array([(1,2,3), (4,5,6), (7,8,9)])
y = np.array([(10,20,30), (40,50,60), (70,80,90)])
然後創建一個陣列類似
[(A1, B1, C1 - C1_), (A2, B2, C2 - C2_),...(AN, BN, CN - CN_)]
你可以這樣做:
z = x[:] # make a copy of array x
z[:,2] -= y[:,2] # subtract the 3rd column of y from z
print(z)
個
產量
[[ 1 2 -27]
[ 4 5 -54]
[ 7 8 -81]]
,並獲得
[C1 - C1_, C2 - C2_,...]
,你既可以使用z[:, 2]
或直接從x
和y
獲得其使用x[:, 2] - y[:, 2]
:
[-27 -54 -81]
我可能是misunderstandi你的問題,但是當你說「我仍然沒有挖掘出如何只對元組中的一個元素進行操作」,這讓我覺得你可能會將元組存儲在NumPy數組中。如果這是真的,那麼我會敦促你重新考慮你使用NumPy的方式:
你會發現,當你使用dtype=object
把Python對象存儲在一個NumPy數組(如一個元組)中時,這些對象最終涉及對Python函數的調用,而不是NumPy通常調用的更快的C/Fortran編譯函數。
因此,雖然您可能喜歡NumPy語法來選擇數組中的項目,但您不會獲得比純Python對象更高的速度優勢。實際上,它可能比使用純Python對象(如元組列表)慢。
由於這個原因,我建議避免在NumPy數組中存儲Python對象,特別是當這些對象是數值時,因爲NumPy的本地數值型dty服務更好。
而不是將三元組存儲在數組中,最好爲NumPy數組添加一個額外的維(一個所謂的「軸」),並沿這個軸存儲3個組件。
一旦你這樣做了,你考慮的數值計算就是小菜一碟。它可以用像做:
x[:,2]-y[:,2]
瞭解如何使用[list解析](http://docs.python.org/2/tutorial/datastructures.html #list-comprehensions)和['zip'](http://docs.python.org/2/library/functions.html#zip)函數。 –
而你沒有列表的列表,而是元組列表。 –