如何在不使用for循环的情况下对linspace的每个元素应用函数
首先,我们有一个叫做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]