Вопрос или проблема
У меня есть некоторые трудности с выбором значений из массива. Вот упрощенная версия проблемной части кода. (Если вы хотите добавить весь код, пожалуйста, укажите это)
n=2
m=8
test= test[:,-n*m:]
test=test.reshape(test.shape[0],n,m)
В итоге я получаю:
test.shape= (350, 2, 8)
когда я запускаю код, я получаю это:
array([[[0.01911469, 0.32352942, 0.18032786, ..., 0.006101 ,
0. , 0. ],
[0.01810865, 0.32352942, 0.18032786, ..., 0.006101 ,
0. , 0. ]],
[[0.01810865, 0.32352942, 0.18032786, ..., 0.006101 ,
0. , 0. ],
[0.01710262, 0.32352942, 0.1967213 , ..., 0.01297103,
0. , 0. ]],
[[0.01710262, 0.32352942, 0.1967213 , ..., 0.01297103,
0. , 0. ],
[0.01408451, 0.32352942, 0.18032786, ..., 0.00763907,
0. , 0. ]],
...,
[[0.01006036, 0.2647059 , 0.26229507, ..., 0.40558836,
0. , 0. ],
[0.01006036, 0.2647059 , 0.26229507, ..., 0.41399646,
0. , 0. ]],
[[0.01006036, 0.2647059 , 0.26229507, ..., 0.41399646,
0. , 0. ],
[0.00804829, 0.2647059 , 0.24590163, ..., 0.4208665 ,
0. , 0. ]],
[[0.00804829, 0.2647059 , 0.24590163, ..., 0.4208665 ,
0. , 0. ],
[0.01207243, 0.2794118 , 0.26229507, ..., 0.42621556,
0. , 0. ]]], dtype=float32)
Мой вопрос: как я могу получить только значения из первых столбцов вот так:
array([[0.01911469],
[0.01810865],
[0.01810865],
[0.01710262],
[0.01710262],
[0.01408451],
...,
[0.01006036],
[0.01006036],
[0.01006036],
[0.00804829],
[0.00804829],
[0.01207243]], dtype=float32)
Я попробовал это:
test=test[:,:,:1]
но я получил это вместо того, что искал:
array([[[0.01911469],
[0.01810865]],
[[0.01810865],
[0.01710262]],
[[0.01710262],
[0.01408451]],
...,
[[0.01006036],
[0.01006036]],
[[0.01006036],
[0.00804829]],
[[0.00804829],
[0.01207243]]], dtype=float32)
Попробуйте следующий код. Так как вы хотите все первые значения нулевого измерения.
test=test[:,0,0]
Ответ или решение
Вопрос, как преобразовать массив, может быть довольно сложным, особенно если важно сохранить определенную структуру данных или извлечь конкретные значения. В данном случаем мы работаем с трехмерным массивом и требуется извлечь данные из первой колонки каждой из плоскостей массивов. Для начала разберемся, как используется индексирование в библиотеках работы с массивами, таких как NumPy.
Теория
NumPy — это популярная библиотека для работы с многомерными массивами и матрицами в Python. В ней активно используются понятия "оси" и "индексирование", что позволяет легко манипулировать данными.
- Ось (axis): В NumPy, ось — это способ обращения к определенному измерению массива. Например, в трехмерном массиве ось 0 касается первого измерения, ось 1 — второго, и ось 2 — третьего.
- Индексация: Это процесс извлечения конкретного элемента из массива с использованием его индекса. Индексы начинаются с нуля, так что для извлечения первого элемента массиве используется индекс 0.
Когда мы имеем дело с трехмерным массивом формы (350, 2, 8)
:
- Ось 0 представляет 350 "плоскостей".
- Ось 1 представляет два элемента в каждой "плоскости".
- Ось 2 имеет восемь элементов в каждой группе.
Пример
На основе вашего кода из вопроса, чтобы извлечь значения из первой колонки каждой из плоскостей, используется следующее выражение: test[:, 0, 0]
.
:
— означает, что мы выбираем все элементы по этой оси (в данном случае, по оси 0, то есть все 350 плоскостей)0
в позиции оси 1 — это выбор первого элемента в каждой из плоскостей.0
в позиции оси 2 — выбираем первый элемент внутри первой строки каждой из плоскостей.
Применение
Применим это на практике. Вот шаги, которые нужно пройти, чтобы извлечь интересующие нас данные:
- Индексация по первой оси (
:
): Мы выбираем все плоскости и просто хотим скопировать их. - Индексация по второй оси (
0
): Мы хотим выбрать из каждой плоскости только первую строку. - Индексация по третьей оси (
0
): Мы стремимся выбрать из каждой строки только первый элемент.
Таким образом, выражение test[:, 0, 0]
вам предоставит одномерный массив, который вы искали. Этот массив будет содержать 350 элементов из первой колонки каждой плоскости массива test
.
Заключение
Работа с многомерными массивами и их преобразование — задача, связанная с тщательным управлением осами и индексами. Индексация — это мощный инструмент для извлечения нужной информации и может быть использована для выполнения сложных операций преобразования. Важно хорошо понимать структуру исходных данных, чтобы корректно применять нужные операции. Ваша конкретная задача — работа с трехмерным массивом — требует извлечения элементов, что было достигнуто через правильное использование индексации.
Если у вас возникнут дополнительные вопросы или сложности с манипуляцией данными в NumPy, не стесняйтесь обращаться за дополнительной информацией. NumPy — это обширная и гибкая библиотека, которая предоставляет огромные возможности для анализа данных и инженерных задач.