第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為什么 sympy lambdify 函數(shù)無(wú)法識(shí)別 numpy sum 函數(shù)和

為什么 sympy lambdify 函數(shù)無(wú)法識(shí)別 numpy sum 函數(shù)和

天涯盡頭無(wú)女友 2022-06-28 15:41:24
我想用 sympy 和 numpy 來(lái)學(xué)習(xí)機(jī)器學(xué)習(xí)。因?yàn)?symoy 提供了非常方便的偏導(dǎo)數(shù)計(jì)算。但是在使用過(guò)程中發(fā)現(xiàn)sympy lambdify函數(shù)并不能識(shí)別numpy sum函數(shù)和multiply函數(shù)。舉個(gè)例子y_ = np.sum(np.dot(w,x)+b)print(y_)y_f = lambdify((w,x,b),y_,"numpy")w_l = np.mat([1,1,1,1,1])x_l= np.mat([1,1,1,1,1]).Tb_l = np.mat([0,0,0,0,0]).Ty_l = np.mat([6,6,6,6,6]).Tprint(y_f(w_l,x_l,b_l))b + w*x[[5] [5] [5] [5] [5]]Process finished with exit code 0y_ = np.multiply(w,x)+bprint(y_)y_f = lambdify((w,x,b),y_,"numpy")w_l = np.mat([1,1,1,1,1]).Tx_l= np.mat([1,1,1,1,1]).Tb_l = np.mat([0,0,0,0,0]).Ty_l = np.mat([6,6,6,6,6]).Tprint(y_f(w_l,x_l,b_l))b + w*xTraceback (most recent call last):  File "G:/lijie/PycharmProjects/hw3/test.py", line 24, in <module>    print(y_f(w_l,x_l,b_l))  File "<lambdifygenerated-1>", line 2, in _lambdifygenerated  File "C:\Users\lijie\AppData\Local\Programs\Python\Python36\lib\site-packages\numpy\matrixlib\defmatrix.py", line 220, in __mul__    return N.dot(self, asmatrix(other))ValueError: shapes (5,1) and (5,1) not aligned: 1 (dim 1) != 5 (dim 0)b + w*xTraceback (most recent call last):  File "G:/lijie/PycharmProjects/hw3/test.py", line 24, in <module>    print(y_f(w_l,x_l,b_l))  File "<lambdifygenerated-1>", line 2, in _lambdifygenerated  File "C:\Users\lijie\AppData\Local\Programs\Python\Python36\lib\site-packages\numpy\matrixlib\defmatrix.py", line 220, in __mul__    return N.dot(self, asmatrix(other))ValueError: shapes (5,1) and (5,1) not aligned: 1 (dim 1) != 5 (dim 0)如您所見(jiàn),lambdify 只接受 lamda 表達(dá)式而不檢查操作符號(hào)。如何解決這個(gè)問(wèn)題呢。謝謝您的幫助
查看完整描述

1 回答

?
泛舟湖上清波郎朗

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊

混合可能很棘手numpy;再加上由 .而不是基本數(shù)組類型sympy引起的潛在混淆。np.matndarray


總共

y_ = np.sum(np.dot(w,x)+b)

評(píng)估 sympy 對(duì)象上的 python/numpy 表達(dá)式。結(jié)果是一個(gè)同情的表達(dá)w*x+b。sympy 對(duì)象是標(biāo)量,因此它不編碼任何類型的矩陣乘法或數(shù)組求和。multiply表達(dá)式的計(jì)算方式相同。


然后,lambdify表達(dá)式將相同的內(nèi)容轉(zhuǎn)換為y_相同的 Python 函數(shù)。這種評(píng)估取決于np.mat論點(diǎn)的維度和類別。


細(xì)節(jié)

暫時(shí)忽略sympy部分:


In [310]: w = np.mat([1,1,1,1,1]) 

     ...: x= np.mat([1,1,1,1,1]).T 

     ...: b = np.mat([0,0,0,0,0]).T 

     ...: y = np.mat([6,6,6,6,6]).T                                             

In [311]: np.sum(np.dot(w,x)+b)                                                 

Out[311]: 25

In [312]: np.multiply(w,x)+b                                                    

Out[312]: 

matrix([[1, 1, 1, 1, 1],

        [1, 1, 1, 1, 1],

        [1, 1, 1, 1, 1],

        [1, 1, 1, 1, 1],

        [1, 1, 1, 1, 1]])

因?yàn)樗鼈兪?,np.mat兩者都是 2d:wx


In [316]: w.shape                                                               

Out[316]: (1, 5)

In [317]: x.shape                                                               

Out[317]: (5, 1)

np.dot(1,5) 和 (5,1) 是 (1,1) 結(jié)果:


In [313]: np.dot(w,x)                                                           

Out[313]: matrix([[5]])

而對(duì)于np.matrix,*被定義為dot:


In [314]: w*x                                                                   

Out[314]: matrix([[5]])

元素方面:


In [315]: np.multiply(w,x)         # elementwise produces (5,5)                                   

Out[315]: 

matrix([[1, 1, 1, 1, 1],

        [1, 1, 1, 1, 1],

        [1, 1, 1, 1, 1],

        [1, 1, 1, 1, 1],

        [1, 1, 1, 1, 1]])

np.sum(np.dot(w,x)+b)做dot, 然后添加b, 并以 asum結(jié)束所有元素。


np.multiply(w,x)+b這是否相乘,增加b。沒(méi)有sum。


更正

使用w.T我第一次錯(cuò)過(guò)的:


In [322]: np.multiply(w.T,x)                                                    

Out[322]: 

matrix([[1],

        [1],

        [1],

        [1],

        [1]])

In [323]: w.T*x                                                                 

---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

<ipython-input-323-11ad839cfa88> in <module>

----> 1 w.T*x


/usr/local/lib/python3.6/dist-packages/numpy/matrixlib/defmatrix.py in __mul__(self, other)

    218         if isinstance(other, (N.ndarray, list, tuple)) :

    219             # This promotes 1-D vectors to row vectors

--> 220             return N.dot(self, asmatrix(other))

    221         if isscalar(other) or not hasattr(other, '__rmul__') :

    222             return N.dot(self, other)


<__array_function__ internals> in dot(*args, **kwargs)


ValueError: shapes (5,1) and (5,1) not aligned: 1 (dim 1) != 5 (dim 0)

np.multiply(5,1) 和 (5,1) 產(chǎn)生 (5,1),元素乘法


w.T*x是 的矩陣乘法np.mat,因此有np.dot誤差。


不鼓勵(lì)使用np.mat(如果沒(méi)有正式貶低)。此外消除了它的符號(hào)優(yōu)勢(shì)numpy。如果你堅(jiān)持使用基數(shù)組類,matmul/@生活會(huì)更簡(jiǎn)單, . 我意識(shí)到仍然使用二維矩陣概念,作為矩陣乘法。 numpyndarraysympy*


同情

在一個(gè)isympy會(huì)話中,我發(fā)現(xiàn)我需要定義w,x,b為符號(hào):


y_ = np.sum(np.dot(w,x)+b)

如果w,x,b只是符號(hào),它們是標(biāo)量,而不是矩陣或數(shù)組。你的np.sum(np.dot(1,2)+4),np.multiply(1,2)+4并且1*2+4都產(chǎn)生同樣的東西。只有當(dāng)變量是數(shù)組,或者np.mat,或者sympy.Matrix表達(dá)式不同時(shí)。


問(wèn)題不在于lambdify. 在這兩種情況下,它都是相同的y_(由 驗(yàn)證print(y_)。您會(huì)收到錯(cuò)誤,因?yàn)閰?shù)是np.mat,并且*是矩陣乘法。


帶x,y,z符號(hào):


In [55]: f = lambdify((x,y,z),x*y+z, 'numpy')                                   

使用isympy內(nèi)?。?/p>


In [56]: f??                                                                    

Signature: f(x, y, z)

Docstring:

Created with lambdify. Signature:


func(x, y, z)


Expression:


x*y + z


Source code:


def _lambdifygenerated(x, y, z):

    return (x*y + z)



Imported modules:

Source:   

def _lambdifygenerated(x, y, z):

    return (x*y + z)

File:      ~/mypy/<lambdifygenerated-4>

Type:      function

閱讀lambdify. 請(qǐng)注意,它基本上是一個(gè)詞法替換


https://docs.sympy.org/latest/modules/utilities/lambdify.html


本文檔警告:


作為一般規(guī)則,NumPy 函數(shù)不知道如何對(duì) SymPy 表達(dá)式進(jìn)行操作,而 SymPy 函數(shù)也不知道如何對(duì) NumPy 數(shù)組進(jìn)行操作。這就是 lambdify 存在的原因:在 SymPy 和 NumPy 之間架起一座橋梁。


同化

https://docs.sympy.org/latest/modules/core.html#module-sympy.core.sympify


說(shuō)它使用eval. 定義x,y,z為符號(hào):


In [66]: eval('np.dot(x,y)+z')                                                  

Out[66]: x?y + z


In [67]: eval('np.sum(np.dot(x,y)+z)')                                          

Out[67]: x?y + z


In [68]: eval('np.multiply(x,y)+z')                                             

Out[68]: x?y + z

換句話說(shuō),它只是將符號(hào)傳遞給 numpy 函數(shù)(和/或運(yùn)算符),


In [69]: np.dot(x,y)                                                            

Out[69]: x?y

dot將其輸入轉(zhuǎn)換為數(shù)組:


In [70]: np.array(x)                                                            

Out[70]: array(x, dtype=object)


In [71]: np.dot(np.array(x), np.array(y))                                       

Out[71]: x?y

這是有效的,因?yàn)榉?hào)定義了“*”和“+”。


sympy文檔警告說(shuō),評(píng)估numpy對(duì) sympy 對(duì)象一無(wú)所知。它將它們視為對(duì)象 dtype 數(shù)組,這可能會(huì)或可能不會(huì)起作用:


In [72]: sin(x)       # sympy sin                                                          

Out[72]: sin(x)


In [73]: np.sin(x)        # numpy sin                                                      

---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

AttributeError: 'Symbol' object has no attribute 'sin'


The above exception was the direct cause of the following exception:


TypeError                                 Traceback (most recent call last)

<ipython-input-73-92f2c2d0df9d> in <module>

----> 1 np.sin(x)


TypeError: loop of ufunc does not support argument 0 of type Symbol which has no callable sin method

np.sin執(zhí)行然后np.sin(np.array(x))將操作委托給不存在的sin方法。x


查看完整回答
反對(duì) 回復(fù) 2022-06-28
  • 1 回答
  • 0 關(guān)注
  • 224 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)