将二维数组的多列传递给lambda函数并返回单列数组

0 投票
2 回答
3879 浏览
提问于 2025-04-18 00:48

我在这里遇到了一些简单的问题。 我搞不清楚怎么把一个二维数组(矩阵)的多个列传递出去,并把它们输出成一个单列数组。

这里有一个简单的例子:

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]])

撰写回答