python和numpy索引操作

本文介绍了如何通过索引操作在Python编程中消除不必要的循环,提升代码执行速度,特别是针对numpy数组和普通数组的示例,以及确保等号两边的一一对应性对于复杂计算的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        索引操作有什么好处呢,第一个是可以消除不必要的循环,我们来看一个样例:

a = []
data = pd.read_csv(f, header=None)
for i in range(len(data[0])):
    a.append(float(round(float(data[0][i]))))

        可以看出这仅仅是一个赋值操作,对a中每个元素的赋值之间没有依赖关系,所以可以用索引去掉循环,提高速度:

a = []
data = pd.read_csv(f, header=None)
a[:] = round(data[0][:].astype(float))

        等号左右两边的索引必须是一一对应关系,即a的所有对应data[0]的所有。

        我们再来看一个复杂一点的样例(注意seq_是numpy数组,因此可以用[:, 20]来进行索引,如果是普通的python数组就只能使用[:][20]):

seq_[:, 20] = pt.sqrt(pt.sum((node_pos[:,0] - node_pos[:,4])**2, dim=1))

        等号右边要计算一个空间距离:先做差、再平方、再加和、最后开方。等号两边同样保证了一一对应。

        最后来看一个更复杂的样例:

nho_attr[:] = pt.sqrt(pt.sum((node_pos[edge_nho[0][:], 0] - node_pos[edge_nho[1][:], 3])**2, dim=1))

        等号右边同样计算一个空间距离;在上一个样例中我们直接用“:”作node_pos的索引,而在这里我们用edge_nho[0][:]作为node_pos的索引。只要我们保证edge_nho[0][:]和nho_attr[:]是一一对应的,就可以保证经过edge_nho[0][:]索引的node_pos可以对nho_attr赋值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Burger~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值