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

问题描述 投票:0回答:1

从 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
是如何完全工作的。

python numpy vectorization
1个回答
0
投票

使用广播:

如果将形状为

a
(N,)
(行向量)的数组
(1, N)
提升为形状为
t
(列向量)的数组
(M, 1)
,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]
© www.soinside.com 2019 - 2024. All rights reserved.