операция с массивом numpy в Python

#python #numpy

#python #numpy

Вопрос:

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

Я пытался, но это не дало мне должного результата.

Вот массив-: это массив numpy

 a=[[ [1,2,13],
     [12,2,32],
     [61,2,6],
     [1,23,3],
     [1,21,3],
     [91,2,38] ]]
  

ожидаемые результаты-:

 1. [[ [1,2],
      [12,2],
      [61,2],
      [1,23],
      [1,21], 
      [91,2] ]]

2.  [ [1,2],
       [12,2],
       [61,2],
       [1,23],
       [1,21],
       [91,2] ]
  

Комментарии:

1. Зачем вам нужны два одинаковых вывода? Почему входные данные имеют первое измерение длиной 1? Почему вы отбрасываете треть данных?

2. преобразуйте список в ndarray, затем попробуйте print(a[:, 0:, 1:])

3. «Я пытался, но это не дает мне должного результата». Хорошо, что ты пробовал? И какой результат это дало вам? И каковы были ваши доводы в пользу того, чтобы попробовать это?

Ответ №1:

Итак, вопрос можно свести к

«Учитывая трехмерный массив numpy с формой (1, 6, 3) , как мы можем сделать копию, кроме формы (1, 6, 2) , удалив последнее индексированное значение из самого внутреннего вложенного массива?»

Индексация массива

В приведенном ниже примере это достигается путем нарезки исходного массива ( a ), чтобы вернуть желаемую структуру.

 import numpy as np

a = np.array([[[1,2,13],[12,2,32],[61,2,6],[1,23,3],[1,21,3],[91,2,38]]])
o = a[:,:,:2]
  

Понимание списка

Ниже используется понимание списка, применяемое для фильтрации a вниз способом, описанным выше.

 import numpy as np

a = np.array([[[1,2,13],[12,2,32],[61,2,6],[1,23,3],[1,21,3],[91,2,38]]])
o = np.array([[j[:2] for i in a for j in i]])
  

В каждом из приведенных выше примеров o будет ссылаться на следующий массив (первый вывод, который вы запрашиваете).

 array([[[ 1,  2],
        [12,  2],
        [61,  2],
        [ 1, 23],
        [ 1, 21],
        [91,  2]]])
  

Учитывая o , как определено в одном из приведенных выше примеров, ваш второй искомый результат доступен через o[0] .

Комментарии:

1. Почему не индексирование массива? a[:, :2]

2. @hpaulj Хорошая мысль! Обновленный ответ, чтобы выделить эту опцию — хотя из-за структуры, определенной в вопросе OP, правильный фрагмент для желаемого результата будет a[:,:,:2] .

3. @JPI93 Спасибо за ваш ответ !!, можете ли вы сказать мне, что делать для 2-го вывода?

4. @Jose обновил ответ. Короче говоря, ваш второй вывод доступен через o[0] .

Ответ №2:

Это сделает

 import numpy as np
a=[[ [1,2,13],
     [12,2,32],
     [61,2,6],
     [1,23,3],
     [1,21,3],
     [91,2,38] ]]
outputs=list()
for i in a[0]:
  outputs.append([i[0],i[1]])
print(np.array([outputs]))
""" OUTPUTS
[[[ 1  2]
  [12  2]
  [61  2]
  [ 1 23]
  [ 1 21]
  [91  2]]]
"""
  

Комментарии:

1. Спасибо за ваш ответ !!, можете ли вы сказать мне, что делать для 2-го вывода?

2. это даст результат 2 print(np.array(outputs))

Ответ №3:

Вместо вывода output2 = output1[0] вы могли бы использовать squeeze метод. Он удаляет все одномерные записи из вашего массива

 output1 = a[:,:,:2]
output2 = output1.squeeze() 
  

Это визуализация процесса для лучшего понимания:

введите описание изображения здесь