首页 > 解决方案 > python numpy连接自动将整数更改为双精度

问题描述

我对编程很陌生,在进行 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

但是当只有一个元素时,它突然将整数输入变为双精度

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

为什么会这样?我试图搜索但找不到。

标签: pythonconcatenation

解决方案


一般来说,你根本不必使用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)     

dtypeis float64,这意味着即使是其他参数也必须在内部转换为 double/float。


推荐阅读