Понимание результирующих форм этих операций с кусочками - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь исправить свои данные для моделей глубокого обучения, которые я создаю, и наткнулся на что-то своеобразное.

У меня есть следующие данные:

>>> original_data.shape
(220, 145, 145)
>>> all_data = np.transpose(original_data, (1,2,0))
>>> all_data.shape
(145, 145, 220)

Результат формы соответствует моему требованию.

Теперь, когда я пытаюсь использовать пустые «горячие клавиши» для использования этих данных, я получаю следующее:

>>> temp = original_data[:][:][0]
>>> temp.shape
(145, 145)

Это уже сбивает с толку, поскольку, на мой взгляд, форма должна быть (220, 145)

>>> temp = all_data[:][:][0]
>>> temp.shape
(145, 220)

Но почему?Было бы разумнее, если бы оно было (145, 145).Но я принял это как есть и попробовал другие

>>> temp = all_data[:][0][:]
>>> temp.shape
(145, 220)

Почему это?

>>> temp = all_data[0][:][:]
>>> temp.shape
(145, 220)

Это поражает меня

Кто-нибудь понимает, что происходитЗдесь?

1 Ответ

0 голосов
/ 11 мая 2018

Теперь, когда я пытаюсь использовать numy 'горячие клавиши'

Вы не используете сочетания клавиш Numpy .

Каждая [...] - это отдельная операция, возвращающая новый объект массива, поэтому в каждом примере вы выполняете нарезку три раза, дважды с [:] и один раз с [0]. array[:] просто создает новое представление для всего массива:

>>> import numpy as np
>>> all_data = np.zeros((145, 145, 220))
>>> all_data.shape
(145, 145, 220)
>>> all_data[:].shape
(145, 145, 220)
>>> np.array_equal(all_data[:], all_data)  # the slice is equal to the original
True

Добавление другого [:] затем просто создает другое представление, и, в конце концов, единственная операция, которая на самом деле дает другой результат, - это операция индексации [0], которая затем создает представление для , просто первого элемент 3-мерного (145, 145, 220) массива, (то есть 2-мерная матрица):

>>> all_data[:][:].shape
(145, 145, 220)
>>> np.array_equal(all_data[:][:][0], all_data[0])
True

Вы , возможно, также не использовали [:] нарезку вообще .

Вам необходимо передать кусочки измерений в виде кортежа в одну [...] операцию индексации:

>>> all_data[0, :, :].shape  # the same result as all_data[0]
(145, 220)
>>> all_data[:, 0, :].shape
(145, 220)
>>> all_data[:, :, 0].shape
(145, 145)

Теперь у вас есть вид на двумерную матрицу по определенному индексу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...