Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 传递参数的正确方法,参数是数组的数组_Python_Arrays_Numpy - Fatal编程技术网

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)