簡體   English   中英

理解算法中 Python 中的雙星符號

[英]Understanding the double star notation in Python in an algorithm

我對 Python 中的以下代碼感到困惑:

import numpy as np
from numpy.random import rand, randn

def generate_data (beta, n):
       u= np.random.rand(n,1)
       y= (u**np.arange(0,4))@beta
       return y
    
np.random.seed(12)
beta = np.array([[10,-140,400,-250]]).T
n = 5 
y = generate_data(beta, n)
print(y)

我真的不明白u**np.arange(0,4)的含義,特別是因為u是一個維度為 n 乘以 1 的向量(其中 n 是任意的),而np.arange(0,4)是一個向量維度 1 乘以 4。盡管如此,這個算法仍然有效

因此,我嘗試了以下方法:

import numpy as np

u= np.array([1,2,3,4,5,6]).T
beta = np.array([[10,-140,400,-250]]).T
y = (u ** np.arange(0,4)) @ beta

print (y)

這次n設置為 6。但是,此算法不起作用,並且有關於尺寸的錯誤消息。

誰能告訴我神秘的u ** np.arange(0,4)的含義?

** 將明智地執行電源操作元素。 這是一些示例代碼,可以清楚地說明:

>>> a = np.array([2,3,4])
>>> b = np.array([1,2,3])
>>> a**b
array([ 2,  9, 64], dtype=int32)

如您所見,a 的第 0 個元素被提升到 b 的第 0 個元素的冪,a 的第 1 個元素被提升到 b 的第 1 個元素的冪,依此類推。

編輯:

我的原始答案沒有解決您的部分問題。 這是一個示例,說明為什么它與任意值 n 一起工作。

a為尺寸為(6,1)的 numpy 數組。

>>> a = np.array([[1], [2], [3], [4], [5], [6]])
>>> a.shape
(6, 1)
>>> b = np.array([1,2,3])
>>> a**b
array([[  1,   1,   1],
       [  2,   4,   8],
       [  3,   9,  27],
       [  4,  16,  64],
       [  5,  25, 125],
       [  6,  36, 216]], dtype=int32)

請注意,output 數組的維度為 (6,3)。 6 是a的第一個維度,3 是b的第一個維度。 當存在維度不匹配時,運算符將a的每個元素提升到b的每個元素的冪。

您的測試示例不起作用的原因是因為一些細節。 在您的第二個代碼塊(測試運算符的代碼)中,您的形狀為(6,)而不是 ( u (6,1) (6,)可能由於 numpy arrays 和 python ** 運算符之間的小不兼容而不起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM