假设您有两个数组的数组。如何使函数正确地分离各部分并在其中应用lambda
函数?
import numpy as np
a=np.asarray([[1]])
b=np.asarray([[1,2]])
r=np.asarray([a,b])
f=lambda x,y:x[:,0]+y
print f(*r)
此代码将上升:IndexError: too many indices
。然而,a
两个(1,2)
数组的简单更改将改变所有内容,因为numpy使r
成为ndarray
并正确地将函数应用于a
和{{1}中的每一个}}。我理解这是因为第一个参数b
得到的是f
,而不是[array([[1]])]
。有没有办法在第一种情况下产生相同的行为?
[[1]]
输出:
import numpy as np
a=np.asarray([[1,2]])
b=np.asarray([[1,3]])
r=np.asarray([a,b])
f=lambda x,y:x[:,0]+y
print f(*r)
编辑 :只是为了澄清,因为[[2 4]]
将在我的实际代码中被调用数百万次,而且它更复杂对我来说保持这个程序非常重要尽可能高效。感谢。
答案 0 :(得分:1)
您需要制作asobjectarray()
功能:
import numpy as np
def asobjectarray(alist):
r = np.ndarray(len(alist), object)
r[:] = alist
return r
a = np.asarray([[1]])
b = np.asarray([[1,2]])
r = asobjectarray([a,b])
f=lambda x,y:x[:,0]+y
print f(*r)