在Python中,将1 x n数组提升到所有m x 1数组中的幂次到m x n数组中的幂次

在Python中,将1 x n数组提升到所有m x 1数组中的幂次到m x n数组中的幂次,python,arrays,vector,Python,Arrays,Vector,给定2个任意长度的1d数组,我希望将“基本”数组中的每个值提升到“指数”数组中的每个幂,以生成2d数组/矩阵 a = [a0, a1, a2, ... , an] b = [b0, b1, b2, ... , bm] 期望输出: [a0^b0, a1^b0, ... , an^b0 ; a0^b1, a1^b1, ... , an^b1 ; ... a0^bm, a1^bm, ... , an^bm ] 我来自Matlab背景,可以很容易地对列和行向量执行此操作: a.^b 如下所

给定2个任意长度的1d数组,我希望将“基本”数组中的每个值提升到“指数”数组中的每个幂,以生成2d数组/矩阵

a = [a0, a1, a2, ... , an]
b = [b0, b1, b2, ... , bm]
期望输出:

[a0^b0, a1^b0, ... , an^b0 ; 
 a0^b1, a1^b1, ... , an^b1 ;
 ...
 a0^bm, a1^bm, ... , an^bm ]
我来自Matlab背景,可以很容易地对列和行向量执行此操作:

a.^b
如下所述:


然而,在Python中使用numpy或scipy等,我找不到任何简单的方法来做到这一点。考虑到Matlab的直观性和易用性,我不得不假设有一种相当优化的方法可以简单地实现这一点(无需列表理解)。

在Python中,用于表示求幂的符号是
**
,numpy支持等长数组的向量化求幂:

>>> a = np.array([1, 2, 3, 4, 5])
>>> b = np.array([5, 4, 3, 2, 1])
>>> a**b
array([ 1, 16, 27, 16,  5])
但是,如果希望得到所需的结果,则必须将行向量与列向量求幂:

>>> a = np.array([[1, 2, 3, 4, 5]]) # Notice now a 2D array, a horizontal vector.
>>> b = np.array([[5, 4, 3, 2, 1]])
>>> a
array([[1, 2, 3, 4, 5]])
>>> b.T
array([[5],
       [4],
       [3],
       [2],
       [1]])
>>> a**b.T
array([[   1,   32,  243, 1024, 3125],
       [   1,   16,   81,  256,  625],
       [   1,    8,   27,   64,  125],
       [   1,    4,    9,   16,   25],
       [   1,    2,    3,    4,    5]])

在Python中,用于表示求幂的符号是
**
,numpy支持等长数组的矢量化求幂:

>>> a = np.array([1, 2, 3, 4, 5])
>>> b = np.array([5, 4, 3, 2, 1])
>>> a**b
array([ 1, 16, 27, 16,  5])
但是,如果希望得到所需的结果,则必须将行向量与列向量求幂:

>>> a = np.array([[1, 2, 3, 4, 5]]) # Notice now a 2D array, a horizontal vector.
>>> b = np.array([[5, 4, 3, 2, 1]])
>>> a
array([[1, 2, 3, 4, 5]])
>>> b.T
array([[5],
       [4],
       [3],
       [2],
       [1]])
>>> a**b.T
array([[   1,   32,  243, 1024, 3125],
       [   1,   16,   81,  256,  625],
       [   1,    8,   27,   64,  125],
       [   1,    4,    9,   16,   25],
       [   1,    2,    3,    4,    5]])