Каков самый быстрый (или самый «питоновский») способ конвертации
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:
- Мой ответ: 4,26 сек.
- Свен Марнах 1: 7,88
- Эмиль Х: 8.51
- Свен Марнах 2: 8,72
- delnan: 10.14
- liori: 53,49
Конечно, я приветствую любые независимые тесты, которые могут подтвердить или опровергнуть мои данные!
Изменить: в моем ответе ниже замена int(j)
на просто j
по-прежнему работает, но работает в шесть раз медленнее! Тогда, возможно, другие ответы станут быстрее, если логическое значение будет приведено с использованием int
. Но мне лень все заново тестировать.
Изменить: liori опубликовал результаты независимых тестов здесь.
x[0]
— это младший бит, аx[-1]
— это старший бит. - person Steve Tjoa   schedule 01.11.2010timeit
для тестирования, это гораздо менее подвержено ошибкам. Мое время: pastebin.com/x1FEP9gY - person liori   schedule 01.11.2010