gpt4 book ai didi

python - numpy.array() 中的 dtype 参数

转载 作者:太空宇宙 更新时间:2023-11-03 11:26:41 24 4
gpt4 key购买 nike

我想了解 Numpy 中数据类型的逻辑。

numpy.min_scalar_type(10)
-> uint8

和:

a = numpy.array([10])
print(a.dtype)
-> int32 (on my machine)

我期待 uint8 而不是 int32,因为 (1.9) 文档说:

numpy.array(object, dtype=None, ...)

dtype : data-type, optional. The desired data-type for the array. If not given, then the type will be determined as the minimum type required to hold the objects in the sequence

和:

numpy.min_scalar_type(a)

For scalar a, returns the data type with the smallest size and smallest scalar kind which can hold its value.

...

Returns: out : dtype. The minimal data type.

我是不是误解了什么?

最佳答案

Python 列表可以包含不同类型的对象,例如X = ['apples', 'oranges',10]。如果执行 type([10]),您会看到容器的 Python 类型在技术上称为列表,而不是数组。

相反,在 numpy 数组中,所有对象都属于同一类型,即 dtype。

文档告诉您,在创建 numpy 数组时,dtype 被设置为将保存所有现有对象 的类型。

看,看:

the type will be determined as the minimum type required to hold the objects in the sequence

作者或许应该加上“而不是他们的值(value)观

我们可以很容易地将 uint8 设为 10:

ten = np.uint8(10)

如果将它放入 Python 列表中,它会保留其类型,因为 Python 列表会保留类型。如果将该列表发送到 numpy.array() 以生成一个 numpy 数组,则 numpy 数组将使用 dtype np.uint8 因为它足够大以容纳所有 ( 1) 预先存在的 Python 列表对象。

In [49]: np.array([ten]).dtype
Out[49]: dtype('uint8')

但是如果我们使用文字 10,python 会为它创建一个 int 对象而不是 np.uint8 因为 np.uint8 是 numpy 特有的,10 所做的就是调用 python 来创建该数字。

如果我们创建一个包含文字 10 的 Python 列表,我们将复制您的结果(使用机器架构整数):

In [50]: np.array([10]).dtype
Out[50]: dtype('int64')

如果我们将这两种类型放在一个 python 列表中,并将该列表发送到 np.array 以创建一个 numpy 数组,那么 dtype 必须足够大以容纳两个对象,在本例中为 int64。

In [51]: np.array([ten, 10]).dtype
Out[51]: dtype('int64')

关于python - numpy.array() 中的 dtype 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32265718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com