python - 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
为什么会这样?我试图搜索但找不到。
解决方案
一般来说,你根本不必使用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
is float64
,这意味着即使是其他参数也必须在内部转换为 double/float。
推荐阅读
- ios - UIStackView 中的按钮不可点击
- java - (Java) 字符 'é' 在 JTextArea 中显示错误
- javascript - PWA 工作箱后台同步队列请求队列对象可访问性
- php - 如何在 woo commerce 的结帐表单字段中删除额外的 div html 类
- java - Selenium 问题:过时的元素参考:元素未附加到页面文档 - 单击预期文本后
- amazon-web-services - AWS 上的 lambda 间通信,无需轮询
- apache-spark - Pyspark 多过滤器数据框
- java - JPA mappedBy 引用了一个未知的目标实体
- sql-server - SQLServer 2014 无法实现查询的并行性
- java - 为什么没有创建规则临时文件夹?