这个问题提供了有关使用输入作为输出来使用 numpy.ufunc 进行计算的信息:
是否可以避免为 numpy.ufunc
不需要的输出分配空间?例如,假设我只想要 modf
的两个输出之一。我能否确保其他不需要的数组根本不会被分配?
我认为将 _
传递给 out
可能会做到这一点,但它会引发错误:
import numpy as np
ar = np.arange(6)/3
np.modf(ar, out=(ar, _))
TypeError: return arrays must be of ArrayType
正如文档中所述,传递 None
意味着输出数组在函数中分配并返回。我可以忽略返回值,但仍然必须在函数内分配和填充它。
最佳答案
您可以通过传递“假”数组来最小化分配:
ar = np.arange(6) / 3
np.modf(ar, ar, np.broadcast_arrays(ar.dtype.type(0), ar)[0])
这个虚拟数组与单个double
一样大,并且modf
不会在内部进行分配。
编辑根据@Eric和@hpaulj的建议,一个更通用和长期的解决方案是
np.lib.stride_tricks._broadcast_to(np.empty(1, ar.dtype), ar.shape, False, False)
关于python - 从不分配 numpy.ufunc 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53329181/