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

Numpy vectorize() сглаживает весь массив

Мой ввод представляет собой массив кортежей

values = np.array([(4, 5, 2, 18), (4, 7, 3, 8)])

и моя функция заключается в следующем:

def outerFunc(values):
    print(values)
    def innerFunc(values):
        print(values)
        mean = np.mean(values)
        result = 0
        for i in range(len(values)):
            result += math.pow(values[i] - mean, 2)
        return result

    if isinstance(values, np.ndarray):
        return np.vectorize(innerFunc)(values)
    else:
        return innerFunc(values)

Хотя я хочу векторизовать по 1 измерению, т. е. один кортеж выполняется внутри innerFunc, но мой вывод выглядит следующим образом:

[[ 4  5  2 18]
 [ 4  7  3  8]]
4
...

Это означает, что функция векторизации векторизует по 2 измерениям, и я получаю следующую ошибку:

for i in range(len(values)):
TypeError: object of type 'numpy.int64' has no len()

Какие изменения внести, чтобы на выходе было:

[[ 4  5  2 18]
 [ 4  7  3  8]]
[4  5  2 18]
...

что-то вроде этого

Спасибо.

ИЗМЕНИТЬ

Это работает как принято, когда кортежи имеют разную длину, может ли кто-нибудь это объяснить,

например, мой ввод

np.array([(4, 5, 2, 18), (4, 7, 3,)])

и функция печатает

[(4, 5, 2, 18) (4, 7, 3)]
(4, 5, 2, 18)
(4, 7, 3)

и возвращаемое значение

[158.75         8.66666667]

Таким образом, только когда все кортежи имеют одинаковую длину, функция обрабатывает их как числа.

Спасибо.


  • Пожалуйста, не могли бы вы уточнить, что именно вы пытаетесь получить с помощью своей функции? и ожидаемый результат? 13.05.2019
  • Ну values=4 и вы не можете вычислить len в целом числе, отсюда и ошибка! Не уверен, что остальная часть функции должна делать 13.05.2019
  • @yatu Я пытаюсь найти сумму квадратов отклонений для разных кортежей, которые хранятся в массиве numpy, например np.array([(4, 5, 2, 18), (4, 7, 3, 8)]), и на выходе будет массив numpy, подобный этому [158.75 17] 13.05.2019
  • Не могли бы вы дать определение sum of square of deviations ? 13.05.2019
  • отклонение от среднего, result = 0 for i in range(len(values)): result += math.pow(values[i] - mean, 2) return result, есть в исходном вопросе. 13.05.2019

Ответы:


1
In [1]: values = np.array([(4, 5, 2, 18), (4, 7, 3, 8)])                        
In [2]: values                                                                  
Out[2]: 
array([[ 4,  5,  2, 18],
       [ 4,  7,  3,  8]])
In [3]: values.shape                                                            
Out[3]: (2, 4)
In [4]: x=np.array([(4, 5, 2, 18), (4, 7, 3,)])                                 
In [5]: x                                                                       
Out[5]: array([(4, 5, 2, 18), (4, 7, 3)], dtype=object)
In [6]: x.shape                                                                 
Out[6]: (2,)

values - это двумерный числовой массив. np.vectorize передает каждый из 8 элементов по одному вашей внутренней функции. Он не повторяется по строкам.

x - это массив 1d с 2 элементами (кортежами). vectorize передаст каждый из этих кортежей вашему внутреннему.

Не используйте vectorize, когда сработает простая итерация — это медленнее и сложнее в использовании.

И посмотрите на свои массивы после их создания, убедившись, что вы понимаете форму и dtype. Не делайте предположений.

13.05.2019
Новые материалы

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

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

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

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

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

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

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