我正在寻找在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. 定位在对称矩阵
- 4. numpy中的对称矩阵?
- 5. 复对称三对角矩阵的快速矩阵指数
- 6. Open MP:稀疏矩阵的对称矩阵乘法
- 7. 制作一个矩阵对称,就地与不在场
- 8. 在R中创建对称矩阵
- 9. 在C++中压缩对称矩阵
- 10. 矢量化一个对称矩阵
- 11. 具有numpy的对称矩阵
- 12. For循环创建对称矩阵
- 13. 如何生成对称随机矩阵?
- 14. scipy稀疏矩阵的对称化
- 15. 测试矩阵是对称还是斜对称的?
- 16. 在对角线上具有零的对称矩阵的名称
- 17. 阵列地址
- 18. 高效地将对象矩阵复制到更大的对象矩阵
- 19. R:矩阵的对矩阵3D图
- 20. 矩阵的矩阵对角元素
- 21. 这种矩阵的名称
- 22. LDL的Numpy阵列乘法对称矩阵的分解乘法
- 23. 矩阵的对象?
- 24. 通过矩阵列名称提取矩阵列值
- 25. 矩阵列表的矩阵组按列名称在R
- 26. 从矩阵中获取矩阵的名称和值列表
- 27. 如何将矩阵的名称设置为另一个矩阵的名称?
- 28. 如何通过C中的结构传递矩阵的地址?
- 29. 试图让我的矩阵打印不是堆地址
- 30. 原地矩阵旋转
但在数学上,这不应该工作的 - 至少,如果我的计算器1的回忆是正确 – warren 2009-09-15 04:51:15
我不是当然我明白。什么不行? – Lonnen 2009-09-15 05:07:23