kaiwu.common._util 源代码

"""
一些简单的工具
"""

import numpy as np


[文档] def check_symmetric(mat, tolerance=1e-8): """检查矩阵是否为对称矩阵,允许一定误差""" result = np.all(np.abs(mat - mat.T) < tolerance) return result
[文档] def hamiltonian(ising_matrix, c_list): """计算哈密顿量. Args: ising_matrix (np.ndarray): Ising 矩阵. c_list (np.ndarray): 要计算哈密顿量的变量组合集合. Returns: np.ndarray: 哈密顿量集合. Examples: >>> import numpy as np >>> from kaiwu.common import hamiltonian >>> ising_matrix = -np.array([[ 0. , 1. , 0. , 1. , 1. ], ... [ 1. , 0. , 0. , 1., 1. ], ... [ 0. , 0. , 0. , 1., 1. ], ... [ 1. , 1., 1. , 0. , 1. ], ... [ 1. , 1., 1. , 1. , 0. ]]) >>> c_list = np.array([[1, 1, 1, 1, 1], [1, -1, 1, -1, 1]]) >>> h = hamiltonian(ising_matrix, c_list) # doctest: +SKIP """ # 方法1 by 王勇 邵帅 (最快版) return -np.einsum("ij,ij->i", (c_list.dot(ising_matrix)), c_list)
# 方法2 by 王勇 邵帅 # return ((c_list.dot(matrix))*c_list).sum(axis=1) # # 方法3 by 王勇 # temp = c_list.dot(matrix) # return -np.array([temp[i] * c_list[i] for i in range(len(c_list))]) # # 方法4 by 王勇 # return -np.diag((c_list.dot(matrix)).dot(c_list.T)) # 空间复杂度高 # # 方法5 by 邵帅 # return -np.einsum('ij,ik,jk->i', c_list, c_list, matrix) if __name__ == "__main__": import doctest doctest.testmod()