代码之家  ›  专栏  ›  技术社区  ›  roshoka

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

  •  0
  • roshoka  · 技术社区  · 2 年前

    从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],...])
    

    等等。

    既然我不想使用for循环,是否可以使用 np.apply_along_axis 对的每个元素执行功能 t 这给了我最后的机会 b 我想要?我一直在努力做到这一点,我想是因为我一定不明白 np.apply_along_axis 完全有效。

    1 回复  |  直到 2 年前
        1
  •  0
  •   pho    2 年前

    使用广播:

    如果你提出一个阵列 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]