如何在使用numpy时删除返回的'dtype'?

时间:2015-03-01 22:50:26

标签: python numpy formatting

我对python有点新意,我必须为类编写一个函数。它接收一个numpy数组并在其中搜索某些整数。我使用doctests测试函数的返回值,我在结果中收到了dtype。

例如:

Expected:
array([1,2,3])

Got:
(array([1,2,3], dtype=int64),)

该功能将自动标记,因此我不确定如何正确返回。

我做了一些研究,建议使用numpy.astype将类型更改为int32,但是在尝试这样做时我收到错误。

myarray = myarray.astype('int32')

有没有办法让它不显示dtype?

2 个答案:

答案 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来测试数组相等性,因此如果您遇到类似的问题,可能需要检查一下。