我对python有点新意,我必须为类编写一个函数。它接收一个numpy数组并在其中搜索某些整数。我使用doctests测试函数的返回值,我在结果中收到了dtype。
例如:
Expected:
array([1,2,3])
Got:
(array([1,2,3], dtype=int64),)
该功能将自动标记,因此我不确定如何正确返回。
我做了一些研究,建议使用numpy.astype将类型更改为int32,但是在尝试这样做时我收到错误。
myarray = myarray.astype('int32')
有没有办法让它不显示dtype?
答案 0 :(得分:3)
在我的32位Windows Python和Linux 64位安装中,当numpy数组使用非系统默认值的整数表示时,将打印dtype。
例如,在32位窗口上:
import numpy as np
test = np.array([1, 2, 3, 4])
repr(test)
打印array(1, 2, 3, 4)
,而
test = np.array([1, 2, 3, 4], dtype=np.int64)
有一个字符串表示array[1, 2, 3, 4], dtype=int64
这是64位Linux安装的另一种方式。您似乎使用的是32位版本,因此int64不是默认的整数类型。
这听起来像你尝试的解决方案(将数组作为类型int32)应该工作 - 你得到了什么错误信息?也许试试myarray = myarray.astype(np.int32)
答案 1 :(得分:2)
您的函数正在返回元组(array([1,2,3], dtype=int64),)
。因此,当您尝试执行myarray.astype('int32')
时,您尝试在元组上调用此方法。也许您正在使用np.where
或其他返回元组的函数。
您要么修复函数以仅返回数组,要么将该行代码更改为myarray = myarray[0].astype('int32')
。
此外,您无法从NumPy数组中“删除”dtype
。每个ndarray都有一个dtype
。我不知道为什么它会在你的doctest中显示出来。 NumPy测试代码通常使用np.allclose
来测试数组相等性,因此如果您遇到类似的问题,可能需要检查一下。