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'效率不高。 –