看板 Python 關於我們 聯絡資訊
最近開始學習 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
juiz:你兩種寫法都有問題,請用 a=a+a.T.copy(); b+=b.T.copy() 02/13 19:23
juiz:抱歉,a=a+a.T 會產生中繼物件,是沒問題的。第二種才有問題 02/13 19:24
wwmm:可以請問一下 那我所寫的 B += B.T 實際的運算是什麼嗎@@ 02/13 19:26
wwmm:還有, 順便請問 第二種寫法會發生的問題是什麼啊? 感謝感謝 02/13 19:41
kusoayan:應該是當矩陣size變大後 裏面用sparse matrix的方式運算 02/13 23:53
kusoayan:產生的問題吧? not sure.. 02/13 23:53
gozule:http://goo.gl/3N71z 02/14 14:05