当前位置: 首页 > 知识库问答 >
问题:

时间序列协方差矩阵的逆

韦晟睿
2023-03-14

我正在尝试将一种基于马氏距离的方法转换为我的代码,该方法适用于图像,必须处理时间序列。这是Matlab代码,用户将图像作为输入传递,然后首先重塑它,然后计算平均值、协方差矩阵及其逆矩阵(他使用图像大小):

function out = rxd(X)

% X input size = (126, 150, 204)

sizes = size(X);

X = reshape(X, [sizes(1)*sizes(2), sizes(3)]);

% X input size = (18900, 204)

M = mean(X);
% M size = (1, 204)
C = cov(X);
% M size = (204, 204)
Q = inv(C);
% M size = (204, 204)

这是我的代码,在这里我用Python实现了第一部分。我没有图像,但有一个时间序列,其形状是(24230,30),这就是为什么我避免了重塑部分:

import os
import numpy as np
X = np.load('dataset.npy')
# dataset shape: (24230, 30)
# 1. Calculate the mean of the matrix
M = np.mean(X, axis=0) # shape = (30,)
# 2. Calculate the Covariance matrix
C = np.cov(X) #shape = (24230, 24230)
# 3. Calculate the inverse of the Covariance matrix
Q = np.linalg.inv(C) #Error

如果我尝试运行它,我会得到错误:

线性误差:奇异矩阵

可能有什么问题?我注意到与Matlab输出的唯一区别是平均形状,但我不明白我的转换是否错误。

共有1个答案

隆芷阳
2023-03-14

忽略MATLAB的所有内容,协方差矩阵C不能倒置;根据定义,这意味着矩阵C是“奇异的”,因此是奇异矩阵误差。(所以这不是关于代码,而是关于数据)。

如果您希望计算该矩阵的逆,请使用伪逆函数np。linalg。pinv可以做到这一点;但一定要明白你为什么这么做。

 类似资料:
  • 我正在尝试将时间序列对象转换为矩阵。 此代码生成错误如下: 但是 出生时间序列 <代码>数据。矩阵(birthstimeseries)。它生成一维数据。如何将此数据帧的行数和列数保留到矩阵中。 我想要这样的结果作为一个矩阵。

  • 我在查看一些代码时发现了以下内容: 有什么区别呢?顺便说一句:我对矩阵很陌生

  • 我想知道在R中存储(和处理)多元(特别是矩阵值)时间序列的最佳选择是什么。 我有一个大数据框,它存储了所有数据和时间变量(在本例中,作为一列名为年) 以下是我可以想到的,但两种选择都有各自的缺点: > 数据帧列表,例如通过

  • 有一个矩阵a,比如: 我只想得到每行没有3个或更多数字的行,它们之间都有最大差异 此函数应仅返回第1行。

  • 问题内容: 我正在自学一些Java,并且坚持创建2D数组,该数组使用随机值对其进行初始化,然后创建该数组的转置。 示例输出为: 原始矩阵 转置矩阵 ^应该是最终输出。代码的一些帮助将不胜感激! 如果行或列的数量超出指定范围,我想编写代码以生成错误消息。以及是否从命令行读取矩阵元素而不是随机生成它们。 问题答案: 这是返回转置矩阵的int [] []的简单方法… 比起打印二维矩阵,您可以使用如下方法

  • 研究了一种算法,该算法需要计算矩阵中连续1的最长数。提供的解决方案描述和解决方案如下: 蛮力方法非常简单。我们直接遍历给定矩阵中的每一条有效线:即水平、垂直、中间对角线上下的对角线、中间反对角线上下的反对角线。每次遍历过程中,如果遇到连续的1,我们会不断增加计数。我们会为遇到的任何不连续重置计数。在这样做的同时,我们还跟踪迄今为止发现的最大计数。 复杂性分析 时间复杂度:O(n^2)我们沿着整个矩