0
我想要写的函数amap
其类似于集结在map
但支持numpy的广播和输出数组的函数。它会这样工作:类似于集结在地图,支持numpy的广播
>>> amap(lambda x:x**2, 1)
array(1)
>>> amap(lambda x:x**2, [1, 2])
array([1, 4])
>>> amap(lambda x,y:y**2+x**2, 1, [1, 2])
array([2, 5])
>>> amap(lambda x,y:y**2+x**2, [1, 2], [[1], [2]])
array([[2, 5], [5, 8]])
传入的函数对标量进行操作。
我写了一个实现。
def amap(func, *args):
'''array version of build-in map
amap(function, scalar/sequence[, ...]) -> array
'''
args = np.broadcast(None, *args)
res = [func(*arg[1:]) for arg in args]
res = np.asarray(res).reshape(args.shape)
return res
它的作品,但它是某种丑陋的,不是很有效。 你有什么好的想法做到这一点?特别是更加朴实时尚的东西?
'lambda'(函数)是对整个数组还是标量运算? – hpaulj
你期待什么样的效率?带标量或数组操作的迭代调用? – hpaulj
@hpaulj该函数仅对标量进行操作,通常它是一个复杂的函数,并且很难操作数组。我认为用额外的'None'进行广播并且使''arg [1:]'减少'None'效率不高。 –