99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)大數(shù)據(jù)時(shí)代numpy.einsum如何理解和運(yùn)用?
numpy.einsum如何理解和運(yùn)用?
2023-04-07
收藏

numpy.einsum是NumPy庫(kù)提供的一個(gè)強(qiáng)大的函數(shù),它可以對(duì)多維數(shù)組進(jìn)行高效的計(jì)算和操作。einsum函數(shù)的全稱為“Einstein Summation”,它的主要功能是對(duì)多個(gè)數(shù)組進(jìn)行運(yùn)算并且輸出結(jié)果。在這篇文章中,我們將通過(guò)介紹einsum函數(shù)的使用方式和示例來(lái)幫助你更好地理解和運(yùn)用它。

語(yǔ)法和參數(shù)

einsum函數(shù)的基本語(yǔ)法如下:

numpy.einsum(subscripts, *operands, out=None, dtype=None, order='K', casting='safe',
             optimize=False)

其中,subscripts參數(shù)是一個(gè)字符串,用于指定計(jì)算的方式和輸出結(jié)果的格式;operands參數(shù)則是一個(gè)或多個(gè)需要參與計(jì)算的數(shù)組。其他參數(shù)包括:

  • out:指定輸出結(jié)果存儲(chǔ)的位置;
  • dtype:指定輸出結(jié)果的數(shù)據(jù)類型;
  • order:指定輸入數(shù)組的存儲(chǔ)順序;
  • casting:指定數(shù)據(jù)類型轉(zhuǎn)換的方式;
  • optimize:是否啟用優(yōu)化選項(xiàng)。

subscripts參數(shù)

subscripts參數(shù)是einsum函數(shù)最重要的參數(shù)之一,它用于指定計(jì)算方式和輸出結(jié)果的格式。在subscripts參數(shù)中,每個(gè)字母都代表一個(gè)維度,而逗號(hào)則表示不同的數(shù)組之間。例如,對(duì)于兩個(gè)形狀分別為(3, 4)(4, 5)的二維數(shù)組A和B,我們可以使用以下方式來(lái)計(jì)算它們的矩陣乘積:

import numpy as np

A = np.random.rand(3, 4)
B = np.random.rand(4, 5)
C = np.einsum('ij,jk->ik', A, B)
print(C)

在這個(gè)例子中,'ij,jk->ik'就是subscripts參數(shù),它表示了矩陣乘法的計(jì)算方式。具體來(lái)說(shuō),'ij'表示第一個(gè)數(shù)組(即A)的前兩個(gè)維度,'jk'表示第二個(gè)數(shù)組(即B)的后兩個(gè)維度,而'->ik'則表示輸出結(jié)果的維度應(yīng)該是前兩個(gè)維度與后兩個(gè)維度的交叉相乘。

除了使用單個(gè)字母代表維度之外,我們還可以使用多個(gè)字母組合來(lái)表示某些軸上的求和。例如,如果我們想要計(jì)算一個(gè)三維數(shù)組的所有元素之和,可以使用以下代碼:

import numpy as np

A = np.random.rand(3, 4, 5)
s = np.einsum('ijk->', A)
print(s)

在這個(gè)例子中,'ijk->'表示對(duì)三維數(shù)組A的所有元素求和。注意,'->'后面沒有任何字母,這意味著輸出結(jié)果不包含任何維度。

示例:張量乘積

einsum函數(shù)不僅可以用于矩陣乘法,還可以廣泛地應(yīng)用到各種線性代數(shù)、物理和機(jī)器學(xué)習(xí)問題中。其中一個(gè)常見的應(yīng)用就是計(jì)算張量乘積。對(duì)于兩個(gè)形狀分別為(n1, n2, ..., nk)(m1, m2, ..., mk)的$k$階張量$A$和$B$,它們的乘積$C$的形狀為$(n_1m_1, n_2m_2, ..., n_km_k)$,它的元素由以下公式給出:

$$C_{i_1m_1 + j_1, i_2m_2 + j_2, ..., i_km_k + j_k} = A_{i_1, i_2, ..., i_k}B_{j_1, j_2, ..., j_k}$$

其中$i_

在NumPy中,我們可以使用einsum函數(shù)來(lái)計(jì)算張量乘積。以下是一個(gè)簡(jiǎn)單的示例:

import numpy as np

A = np.random.rand(2, 3, 4)
B = np.random.rand(5, 4, 3)

C = np.einsum('ijk,lji->il', A, B)

print(C.shape)  # 輸出 (2, 5)

在這個(gè)示例中,我們定義了兩個(gè)三維數(shù)組A和B,它們的形狀分別為(2, 3, 4)(5, 4, 3)。然后,我們使用einsum函數(shù)來(lái)計(jì)算它們的張量乘積,并將結(jié)果存儲(chǔ)在數(shù)組C中。具體來(lái)說(shuō),我們使用字符串'ijk,lji->il'來(lái)指定計(jì)算方式,其中'ijk'表示第一個(gè)數(shù)組(即A)的三個(gè)維度,'lji'表示第二個(gè)數(shù)組(即B)的三個(gè)維度,而'->il'則表示輸出結(jié)果應(yīng)該是形狀為(2, 5)的二維數(shù)組。

示例:多個(gè)數(shù)組的元素乘積

除了矩陣乘法和張量乘積之外,einsum函數(shù)還可以用于各種元素級(jí)別的計(jì)算。例如,我們可以使用einsum函數(shù)來(lái)計(jì)算多個(gè)數(shù)組的元素乘積。以下是一個(gè)簡(jiǎn)單的示例:

import numpy as np

A = np.array([1, 2, 3])
B = np.array([4, 5, 6])
C = np.array([7, 8, 9])

D = np.einsum('i,i,i->', A, B, C)

print(D)  # 輸出 104

在這個(gè)示例中,我們定義了三個(gè)一維數(shù)組A、B和C,并且使用einsum函數(shù)來(lái)計(jì)算它們的元素乘積。具體來(lái)說(shuō),我們使用字符串'i,i,i->'來(lái)指定計(jì)算方式,其中每個(gè)'i'都表示對(duì)應(yīng)數(shù)組的元素,而'->'則表示輸出結(jié)果不包含任何維度。輸出結(jié)果為標(biāo)量值104,它是A、B和C三個(gè)數(shù)組對(duì)應(yīng)位置元素相乘的總和。

總結(jié)

numpy.einsum函數(shù)是一個(gè)強(qiáng)大的工具,它可以用于各種復(fù)雜的多維數(shù)組計(jì)算和操作。本文介紹了einsum函數(shù)的語(yǔ)法和參數(shù),以及幾個(gè)常見的示例。如果你需要處理多維數(shù)組數(shù)據(jù),或者需要進(jìn)行一些高級(jí)的線性代數(shù)運(yùn)算,那么einsum函數(shù)就是一個(gè)非常有用的工具。不過(guò),在編寫代碼時(shí),我們建議仔細(xì)查看einsum函數(shù)的文檔,確保正確理解計(jì)算方式和輸出結(jié)果的格式,以避免出現(xiàn)錯(cuò)誤。

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }