В чем разница между numpy.array ([]) и numpy.array ([[]])? - PullRequest
0 голосов
/ 17 января 2019

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

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

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

Ответы [ 5 ]

0 голосов
/ 08 марта 2019

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

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

Это одномерная структура.Это так, потому что для возврата значений 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.

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

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

Понял?

С уважением,

Густаво,

0 голосов
/ 17 января 2019

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

0 голосов
/ 17 января 2019

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

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

0 голосов
/ 17 января 2019

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

Транспонирование 1-D массива возвращает неизмененный вид исходного массива.

Массив [1,2,3,4] - это 1-D, а массив [[1,2,3,4]] - это 1x4 2-D-массив.

0 голосов
/ 17 января 2019

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

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

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

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