正确传递参数的方法,这是一个数组数组

时间:2014-05-27 11:00:15

标签: 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)

此代码将上升: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]] 将在我的实际代码中被调用数百万次,而且它更复杂对我来说保持这个程序非常重要尽可能高效。感谢。

1 个答案:

答案 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)