我正在尋找在python中使用對稱尋址(即矩陣[2,3]和矩陣[3,2]將返回相同值)的整數的2d矩陣。整數將在它們上進行加法和減法,並用於邏輯比較。我最初的想法是先創建整型對象,然後嘗試用一些python等價的指針填充列表。不過,我不知道該怎麼做。什麼是實現這一點的最佳方式,我應該使用列表還是其他數據結構?對稱地址矩陣
Q
對稱地址矩陣
1
A
回答
1
一個更簡單和更簡潔的方法是隻使用一個帶有排序元組作爲關鍵字的字典。這些元組與您的矩陣索引相對應。重寫__getitem__
和__setitem__
以通過排序的元組來訪問字典;這裏有一個例子類:
class Matrix(dict):
def __getitem__(self, index):
return super(Matrix, self).__getitem__(tuple(sorted(index)))
def __setitem__(self, index, value):
return super(Matrix, self).__setitem__(tuple(sorted(index)), value)
,然後用它是這樣的:
>>> matrix = Matrix()
>>> matrix[2,3] = 1066
>>> print matrix
{(2, 3): 1066}
>>> matrix[2,3]
1066
>>> matrix[3,2]
1066
>>> matrix[1,1]
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "z.py", line 3, in __getitem__
return super(Matrix, self).__getitem__(tuple(sorted(index)))
KeyError: (1, 1)
1
您只需要存儲矩陣的下三角。通常這是通過一個n(n + 1)/ 2長度列表完成的。您需要重載__getitem__
方法來解釋條目的含義。
3
戈盧布和Van貸款的「矩陣計算」一書中概括了可行的解決方案:
您將數據打包到一個向量和訪問如下,假設我> = j的:
a_ij = A.vec((j-1)n - j(j-1)/2 + i)
2
你使用完整的方形numpy矩陣可能會更好。是的,它浪費了存儲冗餘值的一半內存,但是在Python中滾動自己的對稱矩陣將通過將整數存儲並處理爲Python對象,浪費更多的內存和CPU。
相關問題
- 1. Tensorflow對稱矩陣
- 2. 對稱矩陣與不對稱矩陣的區別
- 3. numpy中的對稱矩陣?
- 4. 對稱的0,1矩陣
- 5. 定位在對稱矩陣
- 6. 非對稱投影矩陣
- 7. 特徵對稱矩陣
- 8. 復對稱三對角矩陣的快速矩陣指數
- 9. 「非對稱」成對距離矩陣
- 10. 對於對稱矩陣,Data.Map與Data.Array?
- 11. 使用索引矩陣對Matlab矩陣進行尋址
- 12. Open MP:稀疏矩陣的對稱矩陣乘法
- 13. 爲什麼用對角矩陣乘以對角矩陣返回非對稱矩陣的原因
- 14. 製作一個矩陣對稱,就地與不在場
- 15. R中的對稱循環矩陣
- 16. 根據閾值過濾對稱矩陣
- 17. 通過對稱矩陣循環
- 18. 如何對稱排序相關矩陣?
- 19. 在C++中壓縮對稱矩陣
- 20. python對稱字矩陣使用nltk
- 21. 在Numpy中生成對稱矩陣
- 22. For循環創建對稱矩陣
- 23. 重構從長篇值對稱矩陣
- 24. scipy稀疏矩陣的對稱化
- 25. 如何生成對稱隨機矩陣?
- 26. 矩陣中的對稱位置
- 27. 具有numpy的對稱矩陣
- 28. 矢量化一個對稱矩陣
- 29. 加快Math.NET聲明對稱矩陣
- 30. 在R中創建對稱矩陣
但在數學上,這不應該工作的 - 至少,如果我的計算器1的回憶是正確 – warren 2009-09-15 04:51:15
我不是當然我明白。什麼不行? – Lonnen 2009-09-15 05:07:23