【发布时间】:2019-06-06 11:14:38
【问题描述】:
我正在将一些函数应用于一个 numpy 数组。
import numpy as np
MATRIX=np.random.rand(5,7)
def F_a(x):
return 1
def F_b(x):
return [1,2]
FUNCS=[F_a,F_b]
results=list(map(lambda f:np.apply_along_axis(f,1, MATRIX),FUNCS))
当所有 FUNCS 返回一个标量值时,它会按预期工作。 但是,我的 一些 FUNC 返回可迭代对象(例如可变长度列表)。
如何应用这种方式返回多个值的函数(map + apply_along_axis)?
如果我运行 MVE,我会得到:
[array([1, 1, 1, 1, 1]), array([[1, 2],
[1, 2],
[1, 2],
[1, 2],
[1, 2]])]
我想要的输出是一个大小为 5x3 的数组,而不是两个数组 5x1 和 5x2
如果我尝试:
results=np.stack(list(map(lambda f:np.apply_along_axis(f,1, MATRIX),FUNCS)))
我明白了:
ValueError: all input arrays must have the same shape
与np.vstack、np.hstack 相同
【问题讨论】:
-
我在 4D 体积的第三方向使用
np.apply_along_axis,并将结果数组(也是 4D)存储在numpy数组中。你能做类似的事情吗? -
我正在准备这个
-
我已经添加了
-
首先确保您了解
apply...对每个函数的作用。F_a产生一个 (5,) 数组,F_b一个 (5,2)。它将 func 应用于每一行,并将结果收集到具有相同第一维 5 的数组中。第二维取决于 fun 返回的内容(标量或 2 元素列表)
标签: python numpy dictionary lambda