В чем разница между скобками и скобками в Numpy? - PullRequest
0 голосов
/ 18 октября 2018

Может ли кто-нибудь объяснить разницу между операциями () и [] в Numpy?

Например, я запустил следующие коды:

import numpy as np

x1 = np.array(([2, 9], [1, 5], [3, 6]), dtype=float)
print(x1)
print(type(x1))
x2 = np.array([[2, 9], [1, 5], [3, 6]], dtype=float)
print(x2)
print(type(x2))

y1 = np.array(([2, 9]), dtype=float)
print(y1)
print(type(y1))

y2 = np.array([[2, 9]], dtype=float)
print(y2)
print(type(y2))

И x1, и x2 имеют одинаковыеданные и тип, но у1 и у2 разные.Я думаю, что y1 и y2 должны быть одинаковыми.Может кто-нибудь объяснить причину, по которой y1 и y2 различны?

Ответы [ 4 ]

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

, насколько я понимаю, ввод кортежа в np.array также называется списком, например

a = np.zeros ((3,3))

массив ([[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]])

так же, как если бымы вводим список в np.array для инициализации нуля

a = np.zeros ([3,3])

массив ([[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]])

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

a = ([2,6], [4,5])

([2, 6], [4, 5])

класс 'кортеж'

b = [[2,6], [4,5]]

тип (b)

класс 'список '

0 голосов
/ 18 октября 2018

На самом деле это не имеет ничего общего с Numpy.

Это:

([2, 9], [1, 5], [3, 6])

- это кортеж из 3 списков.

Это:

[[2, 9], [1, 5], [3, 6]]

- это список из 3 списков.

Поскольку кортежи и списки являются упорядоченными последовательностями, numpy обрабатывает их одинаково.

Теперь это:

([2, 9])

isна самом деле это список из двух целых чисел - только parens определяет порядок вычисления выражения - так что numpy получает действительно

[2, 9] 

, тогда как:

[[2, 9]]

- это список из одного списка(из двух целых чисел).Поэтому, конечно же, numpy не будет относиться к ним одинаково, поскольку они действительно разные.

Дело в том, что кортеж делает не парены, а кома, поэтому первый пример:

([2, 9], [1, 5], [3, 6])

действительно:

[2, 9], [1, 5], [3, 6]

TL; DR:

для третьего примера, вы хотите:

([2, 9],)

не

([2, 9])
0 голосов
/ 18 октября 2018

Эта дополнительная скобка не вносит никаких изменений.Это эффективно [2,9].

Есть еще один пример, который вы можете посмотреть:

np.random.randn((((((((((((((((((((((1))))))))))))))))))))))

Это эффективно:

np.random.randn(1)

Это не специальностьNumpy.Дополнительные скобки могут быть добавлены почти в любом месте, если они содержат одно выражение.

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

0 голосов
/ 18 октября 2018

Массивы y1 и y2 имеют разные формы.Первый - одномерный, второй - двухмерный.Скобки вокруг [2, 9] не имеют смысла (потому что внутри них только один элемент и запятая).См. Ниже и первый комментарий.

y1 = np.array(([2, 9]), dtype=float)
y1.shape  # (2,)
y2 = np.array([[2, 9]], dtype=float)
y2.shape  # (1, 2)

Что-то о скобках:

a = (3)
type(a)  # int
b = (3, )
type(b)  # tuple
c = (3, 4)
type(c)  # tuple
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...