Я не понимаю функцию приписки (форма) - PullRequest
0 голосов
/ 29 апреля 2020

Мне интересно, x.shape [0] - это строка или столбец массива.

Я закодировал ...

x=np.array([1,2,3,4])
y=np.array([[1,2,3],[4,5,6]])
print(x.shape)
print(y.shape)

(4,) (2,3)

в x.shape, элемент с индексом 0 является столбцом массива, x. в y.shape элемент с индексом 0 является строкой массива y.

Я не понимаю, как функция shape возвращает свой вывод. пожалуйста помогите:)

ps Также я не понимаю, почему x.shape возвращает (4,). Почему не (4)?

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Я не понимаю, почему x.shape возвращает (4,). Почему бы не (4)?

shape is Кортеж размеров массива , который для 1-D массива равен tuple с одним элементом. Поскольку это всегда кортеж, вы можете легко определить, сколько измерений имеют массив x, выполнив:

len(x.shape)

и отметьте, что это было бы невозможно, если бы x.shape было бы (4) как len((4)) приводит к ошибке, в то время как len((4,)) дает 1. Что касается 2D-массивов, таких как:

y=np.array([[1,2,3],[4,5,6]])

форма - это (number_of_rows, number_of_columns), зная, что y.shape равно (2, 3), вы можете сделать вывод, что будет работать следующее:

y[0][0]  # 0 < 2 and 0 < 3
y[0][1]  # 0 < 2 and 1 < 3
y[0][2]  # 0 < 2 and 2 < 3
y[1][0]  # 1 < 2 and 0 < 3
y[1][1]  # 1 < 2 and 1 < 3
y[1][2]  # 1 < 2 and 2 < 3

во время следующего (только несколько примеров) выдаст IndexError:

y[2][0]  # as 2 < 2 and 0 < 3 is False
y[0][3]  # as 0 < 2 and 3 < 3 is False
y[2][3]  # as 2 < 2 and 3 < 3 is False
0 голосов
/ 29 апреля 2020

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

NumPy массивы на самом деле являются многомерными тензоры . Тензор может иметь любое количество измерений. Векторы и матрицы на самом деле являются не чем иным, как 1-мерным и 2-мерным тензорами соответственно.

Форма массива возвращает размер каждого измерения тензора. Давайте начнем с простого вектора:

x = np.array([1, 2, 3])

Вызов .shape для этой переменной вернет (3,), поскольку массив является 1-D тензором с 3 элементами в первом измерении. Запятая - это просто Python соглашение о том, что скобки представляют Python кортеж.

Теперь давайте попробуем матрицу:

m = np.array([
    [1, 2, 3],
    [4, 5, 6]
])

Запуск m.shape теперь приводит к (2, 3), поскольку первое измерение тензора содержит 2 векторов, а второе измерение (сами векторы) содержит 3 элементов.

Наконец, давайте попробуем Трехмерный тензор:

t = np.array([
    [
        [1, 2, 3],
        [4, 5, 6]
    ],
    [
        [7, 8, 9],
        [0, 1, 2]
    ]
])

t.shape вернет (2, 2, 3), что означает, что первое измерение массива содержит два элемента (в данном случае две матрицы), второе измерение (матрицы самих) содержит два вектора каждый, а третье измерение (векторы) содержит три элемента.

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