Python Numpy/Pytorch数据类型转换/兼容性
我试图找到一些文档来理解数据类型是如何组合的。例如:Python Numpy/Pytorch数据类型转换/兼容性,python,numpy,type-conversion,pytorch,numpy-dtype,Python,Numpy,Type Conversion,Pytorch,Numpy Dtype,我试图找到一些文档来理解数据类型是如何组合的。例如: x : np.int32 = ... y : np.float64 = ... x+y的类型是什么 它是否取决于操作员(此处为+) 它是否取决于存储位置(z=x+yvsz[…]=x+y) 我正在寻找描述这类场景的部分文档,但到目前为止我还是空手而归。如果数据类型不匹配,那么NumPy会。它不依赖于我们所做的(算术)运算的类型,也不依赖于我们分配给的变量,除非该变量已经有了其他的数据类型。下面是一个小例子: In [14]: x = np
x : np.int32 = ...
y : np.float64 = ...
- x+y的类型是什么
- 它是否取决于操作员(此处为
)+
- 它是否取决于存储位置(
vsz=x+y
)z[…]=x+y
我正在寻找描述这类场景的部分文档,但到目前为止我还是空手而归。如果数据类型不匹配,那么NumPy会。它不依赖于我们所做的(算术)运算的类型,也不依赖于我们分配给的变量,除非该变量已经有了其他的数据类型。下面是一个小例子:
In [14]: x = np.arange(3, dtype=np.int32)
In [15]: y = np.arange(3, dtype=np.float64)
# `+` is equivalent to `numpy.add()`
In [16]: summed = x + y
In [17]: summed.dtype
Out[17]: dtype('float64')
In [18]: np.add(x, y).dtype
Out[18]: dtype('float64')
如果没有显式分配数据类型,则结果将被上溯到给定输入的较高数据类型。例如,
numpy.add()
并且,可以使用以下方法检查是否可以根据强制转换规则安全地强制转换两种不同的数据类型
为了完整起见,我添加了以下numpy.can\u cast()
矩阵:
>>> def print_casting_matrix(ntypes):
... ntypes_ex = ["X"] + ntypes.split()
... print("".join(ntypes_ex))
... for row in ntypes:
... print(row, sep='\t', end=''),
... for col in ntypes:
... print(int(np.can_cast(row, col)), sep='\t', end='')
... print()
>>> print_casting_matrix(np.typecodes['All'])
输出将是以下矩阵,显示哪些数据类型可以安全浇铸(由1
表示),哪些数据类型不能浇铸(由0
表示),按照从浇铸(沿轴-0)到浇铸(轴-1)的顺序进行:
由于字符是神秘的,我们可以使用以下内容更好地理解上述铸造矩阵:
In [74]: for char in np.typecodes['All']:
...: print(char, " --> ", np.typeDict[char])
其结果是:
? --> <class 'numpy.bool_'>
b --> <class 'numpy.int8'>
h --> <class 'numpy.int16'>
i --> <class 'numpy.int32'>
l --> <class 'numpy.int64'>
q --> <class 'numpy.int64'>
p --> <class 'numpy.int64'>
B --> <class 'numpy.uint8'>
H --> <class 'numpy.uint16'>
I --> <class 'numpy.uint32'>
L --> <class 'numpy.uint64'>
Q --> <class 'numpy.uint64'>
P --> <class 'numpy.uint64'>
e --> <class 'numpy.float16'>
f --> <class 'numpy.float32'>
d --> <class 'numpy.float64'>
g --> <class 'numpy.float128'>
F --> <class 'numpy.complex64'>
D --> <class 'numpy.complex128'>
G --> <class 'numpy.complex256'>
S --> <class 'numpy.bytes_'>
U --> <class 'numpy.str_'>
V --> <class 'numpy.void'>
O --> <class 'numpy.object_'>
M --> <class 'numpy.datetime64'>
m --> <class 'numpy.timedelta64'>
?-->
b-->
h-->
我-->
l-->
q-->
p-->
B-->
H-->
我-->
L-->
Q-->
P-->
e-->
f-->
d-->
g-->
F-->
D-->
G-->
S-->
U-->
V-->
O-->
M-->
m-->
您是否有一个链接到解释本例中“更高”概念的文档?@Vinz不在官方文档中。我添加了一个对外部文档的引用。不清楚上传结果会是什么,但我可以在创建我的地图时尝试所有这些。谢谢你的邀请information@Vinz我添加了更多的信息。请查看更新的答案!HTH:)给未来的我注意:这种行为只是裸体行为。pytorch似乎不执行向上转换,而是在类型不匹配时执行运行时检查+运行时异常
? --> <class 'numpy.bool_'>
b --> <class 'numpy.int8'>
h --> <class 'numpy.int16'>
i --> <class 'numpy.int32'>
l --> <class 'numpy.int64'>
q --> <class 'numpy.int64'>
p --> <class 'numpy.int64'>
B --> <class 'numpy.uint8'>
H --> <class 'numpy.uint16'>
I --> <class 'numpy.uint32'>
L --> <class 'numpy.uint64'>
Q --> <class 'numpy.uint64'>
P --> <class 'numpy.uint64'>
e --> <class 'numpy.float16'>
f --> <class 'numpy.float32'>
d --> <class 'numpy.float64'>
g --> <class 'numpy.float128'>
F --> <class 'numpy.complex64'>
D --> <class 'numpy.complex128'>
G --> <class 'numpy.complex256'>
S --> <class 'numpy.bytes_'>
U --> <class 'numpy.str_'>
V --> <class 'numpy.void'>
O --> <class 'numpy.object_'>
M --> <class 'numpy.datetime64'>
m --> <class 'numpy.timedelta64'>