【发布时间】:2021-10-23 15:12:55
【问题描述】:
我刚开始学习 NumPy,所以我对它的来龙去脉还是有些茫然。我正在学习如何创建具有特定数据类型的数组。我对此有点困惑:
当我创建一个 int32 数据类型的数组时,它只显示:
a = np.zeros((2, 3), dtype=np.int32)
print(a)
print(a.dtype)
打印语句显示:int32
当我创建一个浮点数据类型的数组时,它只显示:
a = np.array([1, 2, 3, 4], dtype=np.float)
print(a)
print(a.dtype)
打印语句显示:float64
但是,当我创建一个数据类型字符串的数组时,它没有类似的输出:
a = np.array([1,2,3,4,5,6], dtype=np.string_)
print(a)
print(a.dtype)
打印语句显示:
[b'1' b'2' b'3' b'4' b'5' b'6']
|S1
为什么?这是什么意思?还有,为什么我不能选择dtype=np.string?为什么我需要下划线dtype=np.string_?
【问题讨论】:
-
另见stackoverflow.com/a/6205237/982257我认为下划线的原因是双重的:有些人会倾向于(反对推荐)
from numpy import *,这些下划线名称至少会阻止它们覆盖基本的Python内置插件(虽然不是全部......)。否则,在代码编辑器和其他东西中,它还会阻止它们在某些情况下像所说的内置插件一样被语法突出显示...... -
@Iguananaut 它没有回答。我想知道为什么我使用 np.string 会出错。看起来我需要下划线 np.string_
-
只是因为
np.string没有定义。 _ 在语法上没有什么特别之处,它只是一个命名决定,其他 dtype 始终遵循。 github.com/numpy/numpy/pull/6103 对于相同的结果,您也可以使用np.array(..., dtype=bytes)或者如果您想要正常的 unicode 字符串,np.array(..., dtype=str)。您不必使用 Numpy 别名。 -
@Iguananaut 明白了!谢谢各位!很有帮助!