将函数应用于numpy数组,但没有像我预期的那样工作


>>> ndarr = np.array([0, 1, 2])
>>> (lambda x: x + 1) (ndarr)
array([1, 2, 3])

我看到它用应用于它的功能替换了每个元素

但当我对二维阵列这样做时:

>>> ndarr = np.array([[0, 1, 2], [3, 4, 5]])
>>> (lambda x: x[0]) (ndarr)
array([0, 1, 2])

我认为这将取数组的两个元素[0,1,2]和[3,4,5],将lambda应用于它们,得到0和3,结果将是[0,3]。但这将该函数应用于整个数组。为什么?我该怎么做才能得到[0,3]?

如您所注意到的,在numpy数组上应用+ 1将导致所有元素增加一。然而,这并不意味着使用numpy数组执行的每个操作都将是";映射";。在第二个示例中,有一个简单的嵌套列表,您可以选择外部列表的第一个元素。如果您只使用常规Python:,也会发生完全相同的情况

>>> nlist = [[0, 1, 2], [3, 4, 5]]
>>> (lambda x: x[0]) (nlist)
[0, 1, 2]

如果要对每个嵌套数组应用操作,则需要查找映射。然而,这个问题可以用一个切片最容易地解决:

>>> ndarr = np.array([[0, 1, 2], [3, 4, 5]])
>>> ndarr[:,0]
array([0, 3])

最新更新