Nano Hash - криптовалюты, майнинг, программирование

TypeError при индексации массива numpy с использованием numba

Мне нужно суммировать элементы в одномерном массиве numpy (ниже: data) на основе другого массива с информацией о членстве в классе (labels). Я использую numbaв приведенном ниже коде, чтобы ускорить его. Однако, если я не указал явно int() в строке ret[int(find(labels, g))] += y, я получаю сообщение об ошибке:

TypeError: unsupported array index type ?int64

Есть ли лучший обходной путь, чем явное приведение?

import numpy as np
from numba import jit

labels = np.array([45, 85, 99, 89, 45, 86, 348, 764])
n = int(1e3)
data = np.random.random(n)
groups = np.random.choice(a=labels, size=n, replace=True)

@jit(nopython=True)
def find(seq, value):
    for ct, x in enumerate(seq):
        if x == value:
            return ct

@jit(nopython=True)
def subsumNumba(data, groups, labels):
    ret = np.zeros(len(labels))
    for y, g in zip(data, groups):
        # not working without casting with int()
        ret[int(find(labels, g))] += y
    return ret
04.09.2016

  • Этот код работает с Numba 0.28.1 на моей машине без ошибок. Какую версию Numba вы используете. Также в качестве побочного примечания вы можете избегать использования zip и enumerate и явно использовать счетчик индексации из соображений производительности. Вам нужно будет проверить, действительно ли это имеет значение для вашего варианта использования, но в прошлом, по моему опыту, это было так. 04.09.2016
  • @JoshAdel У меня версия 0.26.0 (сейчас попробую обновить). Вы имеете в виду, что код работает без приведения int() на вашем компьютере? 04.09.2016
  • @JoshAdel Он протестировал функцию find без перечисления, и прирост производительности был минимальным. Я буду иметь это в виду при дальнейшей оптимизации кода. 04.09.2016
  • @JoshAdel Я обновился до 0.28.1, и он все еще не работает без кастинга. 04.09.2016
  • извините, пропустил актерский состав. Я добавил официальный ответ 04.09.2016

Ответы:


1

Проблема в том, что find может либо вернуть int, либо None, если ничего не находит, поэтому я думаю, что ошибка ?int64. Чтобы избежать кастинга, вам нужно предоставить возвращаемое значение int, когда find завершает работу, не найдя нужного значения, а затем обрабатывать его в вызывающей программе.

04.09.2016
  • Вот и все! Мне это не пришло в голову, потому что find гарантированно найдет что-то в структуре моей проблемы. Теперь я просто возвращаю фиктивное целое число для теоретического случая, когда нет попадания, и это работает! 04.09.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..