Python 传递参数的正确方法,参数是数组的数组
假设您有一个由两个数组组成的数组。如何使函数正确地分隔各部分,并在每个部分上应用Python 传递参数的正确方法,参数是数组的数组,python,arrays,numpy,Python,Arrays,Numpy,假设您有一个由两个数组组成的数组。如何使函数正确地分隔各部分,并在每个部分上应用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) 此代码将上升:索引器错误:索引太多。然而,a两个a(1,2)数组的简单更改将改变一切,因为numpy使r成为ndarray,并正确地将函数应用于a和b中的每一个。我理解这
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)
此代码将上升:索引器错误:索引太多
。然而,a
两个a(1,2)
数组的简单更改将改变一切,因为numpy使r
成为ndarray
,并正确地将函数应用于a
和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]]
EDIT:我只是想澄清一下,因为
f
将在我的真实代码中被调用数百万次,而且它更复杂,因此我必须尽可能保持此过程的效率。谢谢。您需要制作一个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)