将2D数组的多个列传递给lambda函数并返回单个列数组

时间:2014-04-01 08:55:40

标签: python numpy lambda multidimensional-array

我在这里缺少一些简单的东西。我无法弄清楚如何传递2D数组(矩阵)的多个列并将它们作为单个列数组输出。

这是一个简单的例子:

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 个答案:

答案 0 :(得分: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]])

答案 1 :(得分: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函数