我尝试使用浮动128来提高非常“粗糙”的模拟的准确性。然而,我在NumPy的Cholesky分解中遇到了一个瓶颈,它接受的浮点数不超过64。
**问题:**1)有没有办法用np.float128
做Cholesky?(我可以使用另一个图书馆。
请参阅下面的一些代码来重现问题:
import numpy as np
def get_fractional_std_matrix(t: np.ndarray, H: float):
s = t[np.newaxis, 1:]
u = t[1:, np.newaxis]
H2 = 2 * H
cov_matrix = ((s ** H2) + (u ** H2) - (np.abs(s - u) ** H2)) / 2
N = len(t)
std_matrix = np.zeros(shape=(N, N), dtype=t.dtype)
std_matrix[1:, 1:] = np.linalg.cholesky(cov_matrix.astype(t.dtype))
return std_matrix
H = 0.1
t = np.linspace(start=0, stop=1, num=100).astype(np.longdouble)
get_fractional_std_matrix(t=t, H=H) # TypeError: array type float128 is unsupported in linalg
有趣的是,在Repliky中添加.astype(dtype)
给了我几乎相同的错误,在64位的机器上:
# TypeError: array type float64 is unsupported in linalg
1条答案
按热度按时间lo8azlld1#
所以我是“手工”完成的,它似乎可以很好地处理包括
np.float128
在内的非复杂类型。