我是python新手,正在学习Numpy。我读过并测试过的是np.array只有一种数据类型。当我在普通代码上使用它时,它运行良好。i、 e
import numpy as np
np1 = np.array([1,'2' , True])
for i in np1:
print(type(i))
答案是
<class 'numpy.str_'>
<class 'numpy.str_'>
<class 'numpy.str_'>
但是当我的代码是
np2 = np.array([{1:1 , 2:2 }, 1 , True , '1'])
for i in np2:
print(type(i))
答案是
<class 'dict'>
<class 'int'>
<class 'bool'>
<class 'str'>
这表明元素不属于上面的numpy类,答案是<class 'numpy.str'>
。
当我打印print(type(np2))
时,答案是<class 'numpy.ndarray'>
。
你能解释一下为什么它们不是同一种数据类型吗。?谢谢
如果未给出阵列所需的数据类型,则类型“将被确定为在序列中保存对象所需的最小类型。”
在第一种情况下,最小类型为
str
,因为每个项都可以转换为字符串。新数组包含字符串在第二种情况下,最小类型是
object
(因为<class 'str'>
和dict
不能转换为字符串)。新数组包含对对象的引用。每个对象都有自己的类型您可以强制
np1
成为对象数组:请参阅documentation。它支持的第一个特性是
因此,它将任何元素作为对象处理
还有一件事:
因此,如果可能的话,NumPy数组会高效地将其元素存储为相同的数据类型,以优化性能
在交互式
ipython
会话中,数组等对象以其repr
表示形式显示。我发现这是一个非常有用的信息:注意引号和
U21
数据类型。两者都显示数组包含字符串,数字和布尔值都已转换为公共字符串数据类型注意
object
数据类型。元素显示基本上与列表相同。这样的数组实际上是一个列表。虽然有一些不同,但出于许多目的,它可以被视为一个列表。它与列表相比没有什么优势,但也有一些缺点。它没有数值numpy数组的计算速度对象数据类型数组的数据缓冲区类似于列表的底层缓冲区。两者都包含指向存储在内存中其他位置的对象的指针或引用。从这个意义上讲,它只有一种数据类型——引用
===
如果我创建一个列表,然后从该列表中创建一个对象数据类型数组:
我可以显示数组中的字典与列表中的字典相同。它们具有相同的
id
:以及对列表的修改,将显示在阵列中:
相关问题 更多 >
编程相关推荐