我有不同类型的数据。他们中的大多数是 int
有时是 float
。 int
大小不同,因此大小为 8/ 16/ 32 位。
对于这种情况,我正在创建一个数字类型转换器。因此我使用 isinstence()
检查类型。这是因为我读过 isinstance()
比 type()
差。
关键是我得到的很多数据都是 numpy 数组。我使用 spyder 作为 IDE,然后我通过变量也看到了一种类型。但是当我输入 isinstance(var,'type i read')
我得到 False
。
我做了一些检查:
a = 2.17
b = 3
c = np.array(np.random.rand(2, 8))
d = np.array([1])
对于那里 isinstance(var,type)
我得到:
isinstance(a, float)
True
isinstance(b, int)
True
isinstance(c, float) # or isinstance(c, np.float64)
False
isinstance(d, int) # or isinstance(c, np.int32)
False
c
和 d
当我问的时候是真的
isinstance(c, np.ndarray)
True
isinstance(d, np.ndarray)
True
我可以检查 ndarray
中的步骤
isinstance(c[i][j], np.float64)
True
isinstance(d[i], np.int32)
True
但这意味着我必须为每个维度添加一个新索引,否则它又是 False
。我可以检查那里的类型 dtype
就像 c.dtype == 'float64'
好的,对于我所发现和尝试的东西……我的问题基本上是:
var.dtype
方法与isinstance()
和type()
(最差/更好等)相比如何?- 如果
var.dtype
更糟isinstance()
isinstance()
是否有某种方法没有所有手动索引? (自动索引等)?
原文由 Jan-Bert 发布,翻译遵循 CC BY-SA 4.0 许可协议
数组是类型为
np.ndarray
的对象。它的值或元素存储在数据缓冲区中,可以将其视为连续的内存字节块。数据缓冲区中的字节没有类型,因为它们不是 Python 对象。该数组有一个
dtype
参数,用于解释这些字节。如果dtype
是int32
(有各种同义词),4个字节被解释为一个整数。访问一个元素,比如说c[0]
给出一个依赖于 dtype 的新对象,例如对象类型np.int32
。c[0].item
会给出相应类型的Python对象:(并且
c[0].dtype
c.dtype
;您不需要索引数组的各个元素来检查它们的数据类型)。该数组的相同 4 个字节可以视为
dtype
int8
- 单字节整数。这个备用视图的单个元素是
np.int8
,但是当我取item()
时,我得到一个 Python 整数。没有int8
Python 数字类型。列表包含指向 Python 对象的指针,每个对象都有一个类型。
dtype=object
数组也是如此。但是常见的数值数组不包含 Python 整数或浮点数。它有一个数据缓冲区,可以根据dtype
以各种方式解释。 Python 整数没有不同的大小,至少与 numpy dtypes 的大小不同。所以
isinstance
和type()
内容不适用于ndarray
的内容。====================
从我收集到的评论中,您正在尝试将整数数组转换为浮点数。您不是在转换标量。如果是这样,那么
dtype
才是最重要的;数组总是有一个dtype
。目前尚不清楚您是否可以将np.float32
转换为np.float64
。我建议研究和试验
np.can_cast
函数和x.astype
方法。例如将所有 int dtypes 转换为 float,而不复制已经是 float64 的数据类型。它可以复制和转换
np.float32
。另请查看这些函数的
casting
参数。===========================
我在
scipy.optimize.minimize
找到了另一个测试工具它可用于检查整数: