给定 2 个任意长度的一维数组,我希望将“基数”数组中的每个值提高到“指数”数组中的每个幂以生成一个二维数组/矩阵。
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
如下所述: https://www.mathworks.com/help/matlab/ref/power.html#mw_0a0fb331-989a-442b-ba2c-ede92a343828
然而,在带有 numpy 或 scipy 等的 Python 中,我找不到任何简单的方法来做到这一点。鉴于 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 - 在 Python 中将 1 x n 数组求 m x 1 数组的所有幂到 m x n 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60343586/