我想为数组操作的输出预分配内存,我需要知道是什么dtype来实现它。下面我有一个功能可以完成我想要它做的事情,但非常难看。
import numpy as np
def array_operation(arr1, arr2):
out_shape = arr1.shape
# Get the dtype of the output, these lines are the ones I want to replace.
index1 = ([0],) * arr1.ndim
index2 = ([0],) * arr2.ndim
tmp_arr = arr1[index1] * arr2[index2]
out_dtype = tmp_arr.dtype
# All so I can do the following.
out_arr = np.empty(out_shape, out_dtype)
上面的内容非常难看。 numpy有没有这样做的功能?
答案 0 :(得分:7)
您正在寻找numpy.result_type
。
(顺便说一句,您是否意识到您可以将所有多维数组作为1d数组访问?您无需访问x[0, 0, 0, 0, 0]
- 您可以访问x.flat[0]
。)
答案 1 :(得分:1)
对于那些使用numpy版本< 1.6,你可以使用:
def result_type(arr1, arr2):
x1 = arr1.flat[0]
x2 = arr2.flat[0]
return (x1 * x2).dtype
def array_operation(arr1, arr2):
return np.empty(arr1.shape, result_type(arr1, arr2))
这与您发布的代码没有太大差别,但我认为arr1.flat[0]
比index1 = ([0],) * arr1.ndim; arr1[index1]
略有改进。
对于numpy版本> = 1.6,请使用Mike Graham的回答np.result_type