python浮点数反转_python-根据条件有效地反转列表中的浮点数

我有一个浮点数ndarray(a)和一个0或1(b)的列表. a和b具有相同的长度,通常为1000.我想对索引与b中的1对应的a的元素应用一个简单的函数(例如,减去逆数).

以下方法花费不到1毫秒的时间.是否有可能使其更快?

import numpy as np

# generate dummy data

n = 1000

a = np.random.uniform(low=0, high=10, size=n)

b = np.random.choice(2, 1000)

# map the function

start = time.time()

out = [a[i] if b[i] == 0 else -1/a[i] for i in range(n)]

print time.time() - start

解决方法:

使用b作为遮罩,并相应地设置a的单元格:

m = np.array(b).astype(bool)

a[m] = -1 / a[m]

更好的是,使用np.random.choice初始化b:

b = np.random.choice(2, 1000).astype(bool)

现在,您无需将b转换为数组的开销,只需将其直接用于索引a:

a[b] = -1 / a[b]

这在

22.3 µs ± 501 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

标签:python,arrays,performance,numpy

来源: https://codeday.me/bug/20191011/1894103.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值