我怎样才能得到像 np.asarray() 这样的数组列表的强制数据类型?
How can I get the coerced dtype for a list of arrays much like np.asarray()?
我有一个 ndarray 列表,可能 有不同的数据类型。如果它们具有相同的大小,我可以调用 np.asarray(list_of_ndarrays) 来获得具有适当(“更大”,强制)dtype 的“堆叠”ndarray,例如:
[uint16, uint8, uint16, uint8, uint16, uint16, uint16, uint16, int16, uint16] -> int32
现在,对于大小不同的数组列表,我编写了一个 unify_sizes() 方法,该方法将数组打乱成一个通用大小(具有不同的模式,例如最小/最大大小),以及此方法需要使用正确的数据类型分配结果缓冲区。
(如何)我可以执行与 asarray() 相同的类型强制转换吗?
我将 asarray() 的代码追溯到 PyArray_DiscoverDTypeAndShape(),我想知道是否有该方法的 python 前端?
(我知道我总是可以先将大小统一到一个列表中,然后在该列表上调用 np.asarray(),但是数组可能很大,我可能需要填充,所以我会如果可能,希望避免额外的复制。)
我能想到的一种方法是在形状为 1 的数组列表上实际调用 np.asarray(),其数据类型与我的实际输入相同,但这似乎不是很优雅。
提供的几个函数:
In [30]: np.promote_types(*[np.uint8, np.uint16])
Out[30]: dtype('uint16')
In [31]: alist = [np.ones(2,'uint8'), np.ones(3, 'uint16')]
In [32]: np.result_type(*alist)
Out[32]: dtype('uint16')
我有一个 ndarray 列表,可能 有不同的数据类型。如果它们具有相同的大小,我可以调用 np.asarray(list_of_ndarrays) 来获得具有适当(“更大”,强制)dtype 的“堆叠”ndarray,例如:
[uint16, uint8, uint16, uint8, uint16, uint16, uint16, uint16, int16, uint16] -> int32
现在,对于大小不同的数组列表,我编写了一个 unify_sizes() 方法,该方法将数组打乱成一个通用大小(具有不同的模式,例如最小/最大大小),以及此方法需要使用正确的数据类型分配结果缓冲区。
(如何)我可以执行与 asarray() 相同的类型强制转换吗?
我将 asarray() 的代码追溯到 PyArray_DiscoverDTypeAndShape(),我想知道是否有该方法的 python 前端?
(我知道我总是可以先将大小统一到一个列表中,然后在该列表上调用 np.asarray(),但是数组可能很大,我可能需要填充,所以我会如果可能,希望避免额外的复制。)
我能想到的一种方法是在形状为 1 的数组列表上实际调用 np.asarray(),其数据类型与我的实际输入相同,但这似乎不是很优雅。
提供的几个函数:
In [30]: np.promote_types(*[np.uint8, np.uint16])
Out[30]: dtype('uint16')
In [31]: alist = [np.ones(2,'uint8'), np.ones(3, 'uint16')]
In [32]: np.result_type(*alist)
Out[32]: dtype('uint16')