将二维数组的多列传递给lambda函数并返回单列数组
我在这里遇到了一些简单的问题。 我搞不清楚怎么把一个二维数组(矩阵)的多个列传递出去,并把它们输出成一个单列数组。
这里有一个简单的例子:
import numpy as np
Z = lambda x1,x2: (x1*x2 - 3)^2 + 1
# a sample 2D array with 15 rows and 2 columns
x= np.arange(30).reshape((15,2))
answer = [Z(i[0],i[1]) for i in x]
问题出在代码的最后一行。我希望输出是一个有15行的单列数组。
最后补充一下:我的代码目前只使用了2列作为输入。如果能扩展到可以灵活处理更多列,那就太好了。
2 个回答
1
你可以这样做:
import numpy as np
Z = lambda data, i, j: ((data[:,i]*data[:,j] - 3)**2 + 1)[:,np.newaxis]
# a sample 2D array with 15 rows and 2 columns
x= np.arange(30).reshape((15,2))
answer = Z(x,0,1)
所以也许你根本不需要那个lambda函数了。
1
你能把你最后一行改成这样吗:
answer = np.array([Z(i[0],i[1]) for i in x]).reshape(15,1)
这样会得到:
array([[ -2],
[ 0],
[ 18],
[ 36],
[ 70],
[104],
[154],
[204],
[270],
[336],
[418],
[500],
[598],
[696],
[810]])