我有两个元组列表。
x = [(A1, B1, C1), (A2, B2, C2),...(AN, BN, CN)]
和
y = [(A1_, B1_, C1_), (A2_, B2_, C2_),...(AN_, BN_, CN_)]
我想做以下事情:
[(A1, B1, C1 - C1_), (A2, B2, C2 - C2_),...(AN, BN, CN - CN_)]
我敢说Numpy中的某些功能可以使我做到这一点,但是我仍然没有挖掘如何对元组中的一个元素进行操作,因此,我将不胜感激。谢谢。
如果您以元组列表开始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的本机数字dtype更好用。
与其在数组中存储3个元组,不如在NumPy数组中添加额外的维度(所谓的“轴”)并沿该轴存储3个分量,会更好。
完成此操作后,您所考虑的数值计算就轻松了。可以通过以下方式完成:
x[:,2]-y[:,2]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句