我在类似主题上发布了一个问题,并遇到了另一个更重要的问题。
当我将 SVD 应用于矩阵“A”(下面的代码)时,我得到的输出是预期的二维特征向量矩阵(“U”和“V”)和意外的一维奇异值数组“S”。
U,S,V=np.linalg.svd(A)
Run Code Online (Sandbox Code Playgroud)
对于上下文:它出乎意料的原因是奇异值分解应该产生三个矩阵的乘积。中间矩阵(在本例中为一维数组)应该是对角矩阵,以降序保存非负奇异值。
为什么 Python 将矩阵“转换”为数组?有办法解决吗?
谢谢!
我正在尝试将算法从 MATLAB 转换为 Python。该算法适用于大型数据集,并且需要应用异常值检测和消除技术。
在 MATLAB 代码中,我使用的异常值删除技术是movmedian:
Outlier_T=isoutlier(Data_raw.Temperatura,'movmedian',3);
Data_raw(find(Outlier_T),:)=[]
Run Code Online (Sandbox Code Playgroud)
它通过在三值移动窗口的中心查找不成比例的值来检测滚动中位数的异常值。因此,如果我在第 3 行有一个值为 40 的“Temperatura”列,则会检测到该列并删除整行。
Outlier_T=isoutlier(Data_raw.Temperatura,'movmedian',3);
Data_raw(find(Outlier_T),:)=[]
Run Code Online (Sandbox Code Playgroud)
据我了解,这是通过pandas.DataFrame.rolling实现的。我已经看到几篇文章举例说明了它的用法,但我无法使其与我的代码一起使用:
尝试A:
Dataframe.rolling(df["t_new"]))
Run Code Online (Sandbox Code Playgroud)
尝试B:
df-df.rolling(3).median().abs()>200
Run Code Online (Sandbox Code Playgroud)
#基于@Ami Tavory的回答
我在这里遗漏了一些明显的东西吗?这样做的正确方法是什么?感谢您的时间。