我有两个关于numpy dtypes的问题:
(1)我注意到下面的numpy数据集比较相等但不相同:
np.str_ == np.dtype('U') # true
id(np.str_) == id(np.dtype('U'))
这些类型之间有什么区别吗?或者这些只是指定同一类型的不同方法?
(2):
如果我指定以下内容:
a = np.array([1,2,3],dtype='d')
b = np.array([1,2,3],dtype='g')
然后我得到相同的数组dtype
a.dtype
dtype('float64')
b.dtype
dtype('float64')
但各个元素是不同的:
type(a[0])
<class 'numpy.float64'>
type(b[0])
<class 'numpy.longdouble'>
我的问题是:这些单独的元素类型之间的确切区别是什么?为什么它们Map到相同的数组类型?
1条答案
按热度按时间gcuhipw91#
关于Float:
底层的数据缓冲区是相同的-将它们视为字节:
在我的机器上(常规Windows 11),
longdouble
与double
相同;它不支持float96
或float128
。虽然
list
包含对python对象的引用,但numpy数组有一个'raw'c
字节数组。a[0]
不会返回该数组中的对象。它返回一个新的python对象,一个numpy scalar
,其类型由dtype
确定,并且值是从数组中“复制”的。这种unboxing
比列表索引更复杂,也更慢。在这些类型下面有一个复杂的类继承树
正如
scalars
页面上所记录的,有很多aliases
。