将函数应用于 numpy 数组未按预期工作

applying a function to a numpy array not working as I expected

>>> 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 将导致所有元素递增 1,如您所见。 但是,这并不意味着您使用 numpy 数组执行的每个操作都是“映射”。在第二个例子中,只有一个嵌套列表,你 select 外部列表的第一个元素。如果您只使用常规 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])