如何在不使用for循环的情况下对linspace的每个元素应用函数

0 投票
1 回答
40 浏览
提问于 2025-04-12 19:40

首先,我们有一个叫做linspace的东西

t = np.linspace(0,10, 100)

还有一个数组

a = np.array([1,2,44,2, 13,...])

我想要得到一个数组b,它的长度和这个linspace是一样的,里面的每个元素都是数组a的元素,分别乘以linspace里的元素(而且不想用for循环)。所以你会得到类似这样的结果

b[0]=np.array([1^t[0], 2^t[0], 44^t[0],...])
b[1]=np.array([1^t[1], 2^t[1], 44^t[1],...])

等等,整个linspace都是这样。

因为我不想用for循环,想知道能不能用np.apply_along_axis这个方法,对t的每个元素执行一个函数,这样就能得到我想要的最终结果b。我一直在尝试,但觉得可能是我对np.apply_along_axis的用法理解得不够透彻。

1 个回答

0

使用广播功能:

如果你有一个形状为 (N,)(1, N) 的数组 a(这可以理解为一个行向量),还有一个形状为 (M, 1) 的数组 t(这就是一个列向量),那么 numpy 会自动调整它们的形状,最后返回一个形状为 (M, N) 的数组。在这个新数组中,位置 (i, j) 的元素是 a[j]**t[i]。如果你想把 t 数组表示成列向量,可以用 t[:, None] 这样的方式来索引,这样就会在当前维度后面增加一个维度。

a = np.array([1,2,44,2, 13,...])
t = np.linspace(0,10, 100)

b = a**t[:, None]

撰写回答