调用方式:

numpy.common_type(*arrays)

各个参数的意义:
​​​*arrays​​​:表示输入的参数可以为多个数组,但是一定要为ndarray才能够被这个函数识别,其他的类型如​​int​​​,​​float​​​,​​complex​​​都无法被识别从而报错。
有返回值,会得到一个能够包含所有输入的所有数组类型的类型。

这个​​numpy​​中的函数有什么作用呢?通常它会被用在一个函数中来获取传递进入函数的数组参数的类型,之后就可以使用这个结果来创建和输入数组同样类型的其他数组。代码如下:

import numpy as np


class Debug:
def mainProgram(self, x1):
dtype_x1 = np.common_type(x1)
print(dtype_x1) # <class 'numpy.float32'>
x2 = np.ones([2, 2], dtype=dtype_x1)
print(x2.dtype) # float32
x3 = np.ones([2, 2], dtype=x1.dtype)
print(x3.dtype) # float32


if __name__ == "__main__":
main = Debug()
x1 = np.array([1, 2], dtype=np.float32)
print(x1.dtype) # float32
main.mainProgram(x1)

我们可以看到我们在外部创建了一个全局数组变量​​x1​​​,它的类型我们使用​​x1.dtype​​​打印得到为​​float32​​​。然后我们将它传递进入​​mainProgram()​​​中,之后我们使用​​np.common_type()​​​获取它的类型为​​<class 'numpy.float32'>​​​,然后我们创建了一个新的数组​​x2​​​并将我们刚刚获取的类型结果通过​​dtype​​​参量传递对下​​x2​​​数组进行初始化,接着我们打印​​x2​​​的类型发现和​​x1​​​的类型一致。至此,我们实现了使用​​np.common_type()​​​获取给定数组类型并创建相同类型新数组的过程。然后我们又创建了一个新的数组​​x3​​​,这次我们直接将​​x1.dtype​​​得到的​​x1​​​数组类型通过​​dtype​​​参数传递对​​x3​​​数组进行初始化,结果我们也获取到了与​​x1​​数组类型一致的新数组。由此我们可以说,这两种方式是可以等价的。 然而如果我们需要创建很多个与x1数组类型一致的数组,采用后一种​​x1.dtype​​​获取类型并传递的方法就会导致程序的可读性很差,这也是​​np.common_type()​​函数应运而生的原因。

然而如果仅仅是这样,这个函数功能就显得有些重复了,其实​​np.common_type()​​的主要用法并非如此,而是经常被用在以下的情况,代码如下:

import numpy as np


class Debug:
def mainProgram(self):
x1 = np.array([1, 2], dtype=np.int32)
x2 = np.array([1, 2], dtype=np.float32)
type_12 = np.common_type(x1, x2)
print(type_12) # <class 'numpy.float64'>


if __name__ == "__main__":
main = Debug()
main.mainProgram()

我们创建一个​​int​​​类型的数组和一个​​float​​​类型的数组,从输出结果不难发现,它们的共同类型就是​​<class 'numpy.float64'>​​​,也就是说​​np.common_type()​​可以找出数组们共同所属的类型集合。这里找出的是两个数组的共同所属类型集合,那么多个可不可以呢?答案是可以的。代码如下:

import numpy as np


class Debug:
def mainProgram(self):
x1 = np.array([1, 2], dtype=np.int32)
x2 = np.array([1, 2], dtype=np.float32)
x3 = np.array([1, 2], dtype=np.complex64)
type_123 = np.common_type(x1, x2, x3)
print(type_123) # <class 'numpy.complex128'>


if __name__ == "__main__":
main = Debug()
main.mainProgram()

如上述代码输出结果所示,共同类型​​type_123​​​为​​<class 'numpy.complex128'>​​。

如果大家觉得有用,请高抬贵手给一个赞让我上推荐让更多的人看到吧~