python中存储坐标_最好使用元组或numpy数组来存储坐标

在内存消耗方面,numpy数组比Python元组更紧凑。

numpy数组使用一个连续的内存块。numpy数组的所有元素必须是声明的类型(例如32位或64位float)。Python tuple不一定使用连续的内存块,tuple的元素可以是任意Python对象,这些对象通常比numpy numeric类型消耗更多的内存。在

所以这个问题对numpy来说是一个轻而易举的胜利(假设数组的元素可以存储为numpy数字类型)。在

在速度问题上,我认为选择可以归结为一个问题,“你能将你的代码矢量化吗?”在

也就是说,你能把你的计算表达成对整个数组元素的运算吗。在

如果代码可以矢量化,那么numpy很可能比Python元组更快。(我唯一能想到的情况是,如果你有很多非常小的元组。在这种情况下,形成numpy数组的开销和导入numpy的一次性成本可能会淹没向量化的好处。)

无法矢量化的代码的一个例子是,如果计算涉及查看数组z中的第一个复数,执行一个生成整型索引idx的计算,然后检索{},对该数字进行计算,生成下一个索引idx2,然后检索{},等等。这种类型的计算可能无法矢量化。在这种情况下,您最好使用Python元组,因为您无法利用numpy的优势。在

我不担心访问复数实部/虚部的速度。我猜矢量化的问题很可能决定哪种方法更快。(不过,顺便说一句,numpy可以简单地将复数数组转换成它们的实部,只需跨过复数数组,每隔一个float跳过一次,并将结果视为float。而且,语法非常简单:如果z是一个复杂的numpy数组,那么z.real是float numpy数组的真正部分。这应该比使用纯Python方法对属性查找使用列表理解要快得多:[z.real for z in zlist])

只是出于好奇,你把C++代码移植到Python的原因是什么?在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值