【发布时间】:2011-05-03 05:14:27
【问题描述】:
-
最快(或最“Pythonic”)的转换方式是什么
x = [False, False, True, True]进入
12? (如果有这样的方法。) 如果
x是numpy.array的布尔值会怎样?有什么特殊的命令吗?
我有一个大型的 m×n 布尔数组,其中每个 n 元素行代表一个高维特征向量的单个低维散列。 (在上面的示例中,n = 4。)我想知道答案,以便尽可能地压缩我的数据。谢谢。
编辑:感谢您的回复!使用下面的测试代码,
t = 0
for iter in range(500):
B = scipy.signbit(scipy.randn(1000,20))
for b in B:
t0 = time.clock()
# test code here
t1 = time.clock()
t += (t1-t0)
print t
...这是我的 Thinkpad 笔记本电脑上的运行时:
- My answer:4.26 秒
- Sven Marnach 1: 7.88
- Emil H: 8.51
- Sven Marnach 2: 8.72
- delnan:10.14
- liori: 53.49
当然,我欢迎任何可以证实或反驳我的数据的独立测试!
编辑:在我下面的回答中,将int(j) 更改为简单的j 仍然有效,但运行速度慢了六倍!那么如果使用int 转换布尔值,其他答案可能会变得更快。但是我懒得再测试一切了。
编辑:liori 发布了独立测试的结果here。
【问题讨论】:
-
[False, False, True, True] 转换成12的规则是什么?
-
x[0]是 LSB,x[-1]是 MSB。 -
请使用
timeit进行测试,这样更不容易出错。我的时代:pastebin.com/x1FEP9gY -
感谢您的测试!我一点也不怀疑他们。我已将它们添加到帖子中。
-
需要注意的一点——在 liori 的测试中,sven2() 惨遭失败,因为我们使用的是 1000 位数字。检查结果(如每个函数返回的数字),你会发现它的结果对于这么大的数字是错误的。