Как я могу выбрать данные в многомерном массиве numpy?

У меня есть массив numpy следующей формы

(categories, models, types, events, days) -> (2, 3, 4, 100, 14)

Теперь я хочу рассчитать maximum of 14 days of data per event for a particular category, model, and type

Я делаю это

np.max(data[0][0][0], axis=1)

Я также хочу, например, рассчитать максимум для каждого типа и модели.

Я буду выполнять несколько из этих операций, проходя через [0] как [i].

Это правильный способ доступа к самому внешнему массиву? Есть другой способ?

Дополнение

np.max(data[0][0][0], axis=1)

array([ 3.9264417 ,  3.3029506 ,  3.0707457 ,  3.6646023 ,  1.7508441 ,
        3.1634364 ,  6.195052  ,  1.5353022 ,  1.8033538 ,  1.4508389 ,
        1.3882699 ,  2.0849068 ,  3.654939  ,  6.6364765 ,  3.92829   ,
        6.6467876 ,  1.5442419 ,  4.639682  ,  9.361191  ,  5.261462  ,
        1.7438816 ,  5.6970205 ,  2.4356377 ,  1.6073244 ,  2.6177561 ,
        6.886767  ,  3.890399  ,  2.8880894 ,  1.9826577 ,  1.0888597 ,
        4.3763924 ,  3.8597727 ,  1.790302  ,  1.0277777 ,  6.270729  ,
        9.311213  ,  2.318774  ,  2.9298437 ,  1.139397  ,  0.9598383 ,
        3.0489902 ,  1.6736581 ,  1.3983868 ,  2.0979824 ,  4.169757  ,
        1.0739225 ,  1.5311266 ,  1.4676268 ,  1.726325  ,  1.8057758 ,
        2.226462  ,  2.6197987 ,  4.49518   ,  2.3042605 ,  5.7164993 ,
        1.182242  ,  1.5107205 ,  2.2920077 ,  2.205539  ,  1.4702082 ,
        2.154468  ,  2.0641963 ,  4.9628353 ,  1.9987459 ,  2.1360166 ,
        1.7073958 ,  1.943267  ,  7.5767093 ,  1.3124634 ,  2.2648168 ,
        1.1504744 ,  3.210688  ,  2.6720855 ,  2.998225  ,  4.365262  ,
        3.5410352 , 10.765423  ,  4.6292825 ,  3.1789696 ,  0.92157686,
        1.663245  ,  1.5835482 ,  3.1070056 ,  1.6918416 ,  8.086268  ,
        3.7994847 ,  2.4314868 ,  1.6471033 ,  1.1688241 ,  1.7820593 ,
        3.3509188 ,  1.3092748 ,  3.7915008 ,  1.018912  ,  3.2404447 ,
        1.596657  ,  2.0869658 ,  2.6753283 ,  2.1096318 ,  8.786542  ],
      dtype=float32)

Также,

type(np.array(data)) = numpy.ndarray type(data) = list

Конвертирую для этих операций.

Это не похоже на массив numpy, как выглядит фактический массив? Можете ли вы предоставить несколько строк из реального массива вместе с ожидаемыми результатами?

G. Anderson 06.11.2018 23:00

@ G.Anderson Я добавил дополнительную информацию. Спасибо!

maximusdooku 06.11.2018 23:18
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Теперь у вас есть одномерный массив. Вы можете преобразовать массив в 2D, чтобы упростить доступ к столбцу. Для доступа ко всем элементам столбца используйте :. Если каждый столбец имеет определенное значение (события, дни и т. д.), Вы также можете рассмотреть возможность хранения данных в виде словаря, например {'days': array ([...]), 'events': array ( [])}

from numpy import array, float32
import numpy as np

x = array([ 3.9264417 ,  3.3029506 ,  3.0707457 ,  3.6646023 ,  1.7508441 ,
        3.1634364 ,  6.195052  ,  1.5353022 ,  1.8033538 ,  1.4508389 ,
        1.3882699 ,  2.0849068 ,  3.654939  ,  6.6364765 ,  3.92829   ,
        6.6467876 ,  1.5442419 ,  4.639682  ,  9.361191  ,  5.261462  ,
        1.7438816 ,  5.6970205 ,  2.4356377 ,  1.6073244 ,  2.6177561 ,
        6.886767  ,  3.890399  ,  2.8880894 ,  1.9826577 ,  1.0888597 ,
        4.3763924 ,  3.8597727 ,  1.790302  ,  1.0277777 ,  6.270729  ,
        9.311213  ,  2.318774  ,  2.9298437 ,  1.139397  ,  0.9598383 ,
        3.0489902 ,  1.6736581 ,  1.3983868 ,  2.0979824 ,  4.169757  ,
        1.0739225 ,  1.5311266 ,  1.4676268 ,  1.726325  ,  1.8057758 ,
        2.226462  ,  2.6197987 ,  4.49518   ,  2.3042605 ,  5.7164993 ,
        1.182242  ,  1.5107205 ,  2.2920077 ,  2.205539  ,  1.4702082 ,
        2.154468  ,  2.0641963 ,  4.9628353 ,  1.9987459 ,  2.1360166 ,
        1.7073958 ,  1.943267  ,  7.5767093 ,  1.3124634 ,  2.2648168 ,
        1.1504744 ,  3.210688  ,  2.6720855 ,  2.998225  ,  4.365262  ,
        3.5410352 , 10.765423  ,  4.6292825 ,  3.1789696 ,  0.92157686,
        1.663245  ,  1.5835482 ,  3.1070056 ,  1.6918416 ,  8.086268  ,
        3.7994847 ,  2.4314868 ,  1.6471033 ,  1.1688241 ,  1.7820593 ,
        3.3509188 ,  1.3092748 ,  3.7915008 ,  1.018912  ,  3.2404447 ,
        1.596657  ,  2.0869658 ,  2.6753283 ,  2.1096318 ,  8.786542  ],
      dtype=float32)

x = np.reshape(x, (20, 5))
print x[:, -1]

>> [1.7508441  1.4508389  3.92829    5.261462   2.6177561  1.0888597
6.270729   0.9598383  4.169757   1.8057758  5.7164993  1.4702082
2.1360166  2.2648168  4.365262   0.92157686 8.086268   1.7820593
3.2404447  8.786542  ]

Я не уверен, что понимаю. Как это позволяет мне, например, создать максимум по определенной оси?

maximusdooku 06.11.2018 23:42

max_of_each_column = np.max (x [: 14,:], 0) Возвращает: array ([9.311213, 6.195052, 7.5767093, 9.361191, 6.270729], dtype = float32) Это максимум из первых 14 элементов каждого столбца. Из вашего вопроса немного непонятно, хотите ли вы этого. Пожалуйста, укажите ожидаемый результат, если вы имеете в виду другое.

onodip 06.11.2018 23:57

Нет, к сожалению - это не то, что я хотел ... Хотел, например, максимум на types или model запросто ..

maximusdooku 07.11.2018 00:49

Что ж, если вы напишете np.max (x [: 14,:], 2), это будет максимум для types, и так далее для остальных.

onodip 07.11.2018 01:20

Другие вопросы по теме