Почему создание специальных массивов в NumPy иногда требует ввода кортежа, а иногда нет? - PullRequest
0 голосов
/ 30 января 2020

Например, если я создаю массив с единицами:

E = np.eye(5, 10) 
print(E)

[[1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]]

Функция требует 5, 10 в качестве ввода. Однако, если я создаю массив с нулями:

F = np.zeros((5, 10))
print(F)

[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]

, тогда я замечаю, что мне нужно использовать кортеж (5, 10) в качестве входных данных. Почему NumPy так устроен? Когда использовать кортеж, а когда нет, есть ли правило?

1 Ответ

0 голосов
/ 30 января 2020

Вам просто нужно прочитать документацию, чтобы понять почему.

вот документация для numpy .eye

Вот документация для numpy .zeros

краткий ответ: numpy.eye возвращает знак формы (N, M) , он не может иметь 3 или более измерений!

но numpy.zeros принимает в качестве входных данных кортеж. он может иметь любую форму с любыми размерами. как 3 измерения или больше!

посмотрите на этот пример:

>>> np.eye(3,3)
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])
>>> np.zeros((2,2,2))
array([[[0., 0.],
        [0., 0.]],

       [[0., 0.],
        [0., 0.]]])
>>> np.zeros((2,2,2,2))
array([[[[0., 0.],
         [0., 0.]],

        [[0., 0.],
         [0., 0.]]],


       [[[0., 0.],
         [0., 0.]],

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