List Python-元组列表中的减法元素
我有两个元组列表List Python-元组列表中的减法元素,list,python-3.x,numpy,List,Python 3.x,Numpy,我有两个元组列表 x = [(A1, B1, C1), (A2, B2, C2),...(AN, BN, CN)] 及 我想做以下几件事: 获取一个新列表[(A1、B1、C1-C1)-(A2、B2、C2- (安,BN,CN-CN) 从那里,创建一个列表 仅由[C1-C1_u3;,C2-C2_3;,…]组成 我想冒昧地说,Numpy中的某些东西允许我这样做,但我仍然没有找到如何只对元组中的一个元素执行操作的方法,因此我将感谢任何可能的帮助。 谢谢。如果以元组列表的x和y开头,则很容易将它们转换为
x = [(A1, B1, C1), (A2, B2, C2),...(AN, BN, CN)]
及
我想做以下几件事:
谢谢。如果以元组列表的
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]
我可能误解了你的问题,但当你说“我还没有弄明白如何只对元组中的一个元素执行操作”时,我觉得你可能在NumPy数组中存储元组。如果这是真的,那么我敦促你重新考虑你使用NumPy的方式: 您可以看到,当您使用
dtype=object
将Python对象存储在NumPy数组(例如元组)中时,对这些对象执行的所有操作最终都涉及到对Python函数的调用,而不是NumPy通常调用的更快的C/Fortran编译函数
因此,虽然您可能喜欢NumPy语法来选择数组中的项,但与普通Python对象相比,您并没有获得任何速度优势。事实上,它可能比使用普通Python对象(例如元组列表)慢
出于这个原因,我建议尽可能避免将Python对象存储在NumPy数组中,尤其是当这些对象是数字对象时,因为NumPy的本机数字数据类型服务得更好
与其在数组中存储3元组,不如在NumPy数组中添加一个额外的维度(所谓的“轴”),并沿该轴存储3个组件
一旦你这样做了,你所考虑的数值计算就是小菜一碟。可以通过以下方式完成:
x[:,2]-y[:,2]
没有numpy:
>>> x = [(1,2,3), (4,5,6), (7,8,9)]
>>> y = [(10,20,30), (40,50,60), (70,80,90)]
>>> [ (a[0], a[1], a[2] - b[2]) for a, b in zip(x, y) ]
[(1, 2, -27), (4, 5, -54), (7, 8, -81)]
>>> [ a[2] - b[2] for a, b in zip(x, y) ]
[-27, -54, -81]
学习如何使用和函数。你没有列表列表,只有元组列表。
>>> x = [(1,2,3), (4,5,6), (7,8,9)]
>>> y = [(10,20,30), (40,50,60), (70,80,90)]
>>> [ (a[0], a[1], a[2] - b[2]) for a, b in zip(x, y) ]
[(1, 2, -27), (4, 5, -54), (7, 8, -81)]
>>> [ a[2] - b[2] for a, b in zip(x, y) ]
[-27, -54, -81]