[問題] 練習numpy遇到的問題

看板Python作者 (加油!!!)時間11年前 (2013/02/13 17:48), 編輯推噓1(106)
留言7則, 4人參與, 最新討論串1/1
最近開始學習 python, 主要目的就是為了要學會 numpy. 下面是我遭遇的一個問題: 我分別創造兩個 size 為 10 x 10 的 np.ones 矩陣, 並以變數 A, B 綁定. 那我可以得到: A = A + A.T 和 B += B.T 的結果是一致的, 也就是每個元素都是 2.0. 但是當我把 size 變成 100 x 100 時, 跑出來的結果如下: In [1]: import numpy as np In [2]: A = np.ones( (100, 100) ) In [3]: A = A + A.T In [4]: A Out[4]: array([[ 2., 2., 2., ..., 2., 2., 2.], [ 2., 2., 2., ..., 2., 2., 2.], [ 2., 2., 2., ..., 2., 2., 2.], ..., [ 2., 2., 2., ..., 2., 2., 2.], [ 2., 2., 2., ..., 2., 2., 2.], [ 2., 2., 2., ..., 2., 2., 2.]]) In [5]: B = np.ones( (100, 100) ) In [6]: B += B.T In [7]: B Out[7]: array([[ 2., 2., 2., ..., 2., 2., 2.], [ 2., 2., 2., ..., 2., 2., 2.], [ 2., 2., 2., ..., 2., 2., 2.], ..., [ 3., 3., 3., ..., 2., 2., 2.], [ 3., 3., 3., ..., 2., 2., 2.], [ 3., 3., 3., ..., 2., 2., 2.]]) 我想請問.... 為什麼會跑出 3.0 啊 @@ 謝謝各位的回覆 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 115.165.192.204

02/13 19:23, , 1F
你兩種寫法都有問題,請用 a=a+a.T.copy(); b+=b.T.copy()
02/13 19:23, 1F

02/13 19:24, , 2F
抱歉,a=a+a.T 會產生中繼物件,是沒問題的。第二種才有問題
02/13 19:24, 2F

02/13 19:26, , 3F
可以請問一下 那我所寫的 B += B.T 實際的運算是什麼嗎@@
02/13 19:26, 3F

02/13 19:41, , 4F
還有, 順便請問 第二種寫法會發生的問題是什麼啊? 感謝感謝
02/13 19:41, 4F

02/13 23:53, , 5F
應該是當矩陣size變大後 裏面用sparse matrix的方式運算
02/13 23:53, 5F

02/13 23:53, , 6F
產生的問題吧? not sure..
02/13 23:53, 6F

02/14 14:05, , 7F
02/14 14:05, 7F
文章代碼(AID): #1H6s5tB3 (Python)