python numpy конкатенация автоматически меняет целое число на удвоение - PullRequest
0 голосов
/ 25 мая 2020

Я новичок в программировании, и при выполнении конкатенации numpy есть одна любопытная вещь, о которой я не очень разбираюсь.

Код прост, он пытается повернуть элемент массива с коэффициентом «k».

def rotate(nums, k: int) :
    a = nums[k * -1 : ]
    b =  nums[0 : len(nums) - k]
    c = np.concatenate((a, b))
    nums[:] = c
    for i  in nums :
        print(i,end='')

Моя цель - вывести повернутый целочисленный массив. Он отлично работает, когда размер массива равен или больше 2.

ex1) rotate([1,2,3,4],1) ==> 4123
ex2) rotate([1,2,3,4],2) ==> 3412

Но когда есть только один элемент, он внезапно меняет целочисленный ввод на double

rotate([1], 1) ==> 1.0

почему это происходит ? Я попытался найти, но не нашел.

1 Ответ

1 голос
/ 25 мая 2020

Вообще говоря, вам вообще не нужно использовать numpy, попробуйте заменить

c = np.concatenate((a, b))

на

c = a + b

, и это будет работать как шарм. Это просто самый простой способ объединить два списка.

Теперь давайте решим, почему на выходе стоит double. Мы можем уменьшить проблему передачи пустого списка до np.concatenate(([1], [])), что в точности соответствует rotate([1], 1). Проблема в том, что np.concatenate внутренне преобразует все параметры в np.array. Теперь давайте посмотрим, каков результат преобразования пустого списка в np.array:

  In [15]: numpy.array([[]])
  Out[15]: array([], shape=(1, 0), dtype=float64)     

dtype равно float64, что означает, что даже другие аргументы должны быть внутренне преобразованы в double / float .

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