В чем разница между numpy.array([]) и numpy.array([[]])?

Почему я не могу получить транспонирование в альфа-версии, но могу получить в бета-версии? Что делают дополнительные []?

alpha = np.array([1,2,3,4])
alpha.shape
alpha.T.shape

beta = np.array([[1,2,3,4]])
beta.shape
beta.T.shape

[] добавить измерение. Транспонировать нет.

hpaulj 17.01.2019 17:53
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
60
5

Ответы 5

alpha — это одномерный массив, транспонирование — это само собой.

beta — это двумерный массив, поэтому вы можете преобразовать (1,n) в (n,1).

Чтобы сделать то же самое с alpha, вам нужно добавить измерение, вам не нужно его транспонировать:

alpha[:, None]

alpha представляет собой одномерный массив формы (4,). Транспонирование снова просто alpha, то есть alpha == alpha.T.

beta представляет собой двумерный массив формы (1,4). Это одна строка, но она имеет размеры два. Его транспонирование выглядит как один столбец формы (4,1).

Из документации (ссылка на сайт):

Transposing a 1-D array returns an unchanged view of the original array.

Массив [1,2,3,4] является одномерным, а массив [[1,2,3,4]] представляет собой двумерный массив 1x4.

Вторая пара скобок указывает на то, что это двумерный массив, поэтому с таким и массивом транспонированный массив отличается от первого массива (поскольку транспонирование переключает 2 измерения). Однако, если массив только 1D, транспонирование ничего не меняет, и результирующий массив равен исходному.

Когда я пришел в мир языков программирования, придя из «математической стороны бизнеса», это тоже показалось мне странным. Немного подумав, я понял, что с точки зрения программирования они разные. Взгляните на следующий список:

a = [1,2,3,4,5]

Это 1D структура. Это так, потому что для возврата значений 1, 2, 3, 4 и 5 вам просто нужно присвоить одно значение адреса. 3 будет возвращено, если вы, например, ввели команду a[2].

Теперь взгляните на этот список:

b = [[ 1,  2,  3,  4,  5],
     [11, 22, 33, 44, 55]]

Например, чтобы вернуть 11, вам понадобятся два позиционных числа: 1, потому что 11 находится во втором списке, и 0, потому что во втором списке оно находится в первой позиции. Другими словами, b[1,0] возвращает вам 11.

Теперь идет часть трюка. Посмотрите на этот третий список:

c = [ [ 100, 200, 300, 400, 500] ]

Если вы посмотрите внимательно, каждое число требует, чтобы 2 позиционных числа были взяты из списка. Например, для 300 требуется 0, потому что он находится в первом (и единственном) списке, и 2, потому что это третий элемент первого списка. c[0,2] возвращает вам 300.

Этот список можно транспонировать, потому что он имеет два измерения, а операция транспонирования — это то, что меняет позиционные аргументы. Таким образом, c.T вернет вам список, форма которого будет [5,1], поскольку c имеет форму [1,5].

Вернитесь к списку а. Там у вас есть список только с одним позиционным номером. Этот список имеет форму только [5], поэтому у операции транспонирования нет второго позиционного аргумента, с которым можно было бы работать. Поэтому остается [5], и если вы попробуете a.T, вы получите обратно a.

Понятно?

С наилучшими пожеланиями,

Густаво,

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