cvxpy有變數型別參與運算的一些規則

2021-08-26 14:40:48 字數 1237 閱讀 3600

今天想利用cvxpy工具包解決乙個凸優化的問題,發現在執行以下**的時候,第三行**如果採用括號中的形式會出現報錯,但是換成括號外面的**形式之後,執行就完全沒有問題了。

w_out = cvx.variable((n_hidden_2,1))

b_out = cvx.variable((1))

pout = layer2 * w_out + b_out(np.dot(layer2, w_out) + b_out)

obj = cvx.minimize(cvx.sum_squares(pout- data_y[0:80]))

prob = cvx.problem(obj)

prob.solve()

(1)cvxpy是處理不了張量的問題的,傳入的資料型別只能是陣列或者變數引數等

(2)cvxpy裡面沒有mean求平均這個函式

(3)用cvxpy的時候,要注意有變數型別參與的運算中要嚴格滿足線性代數加減乘除的矩陣形狀一致的原則,不能使用numpy的陣列廣播功能。

(4)有變數型別參與的運算結果想用下標的方式訪問元素,只能將該變數定義為字典,再利用字典元素的下表訪問字典中的元素。

補充:(5)cvxpy會出現上面說的問題是由於numpy陣列與cvxpy中的variable做了向量運算,而這種運算在cvxpy中是做不了的,numpy做向量運算的時候兩個陣列裡面都要有資料,而上面的括號裡面的w_out顯然是乙個空的(若列印,輸出為none),這樣做顯然是得不到運算結果的。(即cvxpy中是不存在點乘運算的,它裡面的*表示的是線性代數中標準的矩陣相乘,只有之一種矩陣乘法的運算)

(6)numpy中的陣列是有具體數值的陣列,而cvxpy與tensorflow中的variable陣列是乙個變數陣列,兩種陣列不能相互賦值。

(7)關於constraints的形式問題:constraints = [constraints,pre_y[a, b]<=0 ]對比constraints = constraints + [pre_y[a][0,b]<=0],constraints的條件疊加形式為後一種,因為constraints本身就是,前者的錯誤在於[,條件](8)關於(7)問題的一點心得:(7)問題困擾了我一下午加一晚上,找問題的時候始終不明白為什麼這行**會報錯,一直懷疑是這個軟體愛呢報的問題,最後想起來之前看過關於constraints的條件迭代形式,抱著試試看的想法找到了那篇csdn,立馬發現了問題,我覺得程式設計debug的時候一定要找準問題所在,如果確定報錯的一行沒有邏輯問題,就要找出報錯的那一行**中涉及到的每一部分,追根溯源,才能找到問題,不能想當然。

shell程式設計 有型別的變數

1 通過 declare 和 typeset 命令 2 declare 引數如下 3 舉例 例1 宣告為不可變形式,declare r var hello var world echo var 列印出 world 說明 var是可變的 declare rvar hello var world 列印結...

shell 04 有型別變數

一 有型別變數 舉例 declare r 將變數設為唯讀 declare r var hello shell var hello world 報錯 bash var readonly variable declare i 將變數設為整數,如果不申明就是10 100 字串呈現 num1 10 decl...

變數 資料型別以及運算

1.6種變數以及字串 byte short int long double float char boolean以及字串string。另char用單引號 2.變數的命名原則以及使用方法。先賦值再使用 變數名不能重複 3.算術運算 條件運算 邏輯運算 優先順序 型別提公升規則以及強制轉換 4.if語句...