nan
corr(A, B) 等效于
matlab
的 corr(A, B, 'Rows', 'pairwise'),除了
nan
corr 例程在大矩阵上快几个
数
量级。
nan
corr 还返回 t 统计量: [coef, t] =
nan
corr(A, B); zmat = t;
这些可以转换为 p
值
,如下所示: [系
数
, t, n] =
NAN
CORR(A, B); pval = tcdf(-abs(t), n - 2)
NaN
(Not a Number)
NaN
(不是
一个
数
),当你处理不同,多种多样的
数
据时,会经常碰到
NaN
,
NaN
是0/0 或者是导入了
一个
字符串作为
数
值
。也可能是无穷或者是当你插入了
一个
超出给定范围的
数
。接下来我们看下
NaN
有啥性质,以及如何处理
A_var = [-8 10
NaN
9 4 -4 -7; 9
NaN
9 4 -10 9 0; -8 10
NaN
5 -10 -1
NaN
]
A_var =
-8 10
NaN
9 4 -4 -7
9
NaN
9 4 -10 9 0
-8 10
解决的问题:为了能够对采集的
数
据矩阵做
数
据处理,需要对矩阵
中
的存在的
NaN
进行查
值
替换
处理办法:由于
数
据自身特性,用上
一个
采集的
数
据代替
NaN
function result_matrix = find
NaN
(matrix)
%找到矩阵
中
NaN
,并用同列前
一个
数
字替换
%计算矩阵行列
数
(r:行
数
,c:列
数
)
[r,c] = size(matrix);
temp = is
nan
(mat
1、主要是想不循环,将矩阵
中
的某些
数
字换掉处理,当然,大部分是对于方阵来说。
2、第
一个
是,如果square matrix
中
有
nan
,要
变成
0,怎么办;如果是
inf
,怎么办?
a(is
nan
(a)) = 0;
a(a==
inf
)=0;
3、第二个,如果想把对角线的元素换掉,怎么办?
c-diag(diag(c))
e(logical(eye(N)))=0
4、可以总结一下:如果想...
此函
数
用内插
值
或相邻
值
替换一维
数
组
中
的
NaN
值
。 插
值
方案假设
数
据是均匀分布的。 此函
数
不进行外推。
句法x = rep
nan
(x); x = rep
nan
(x,method);
描述x = rep
nan
(x) 返回 x 无
NaN
。
x = rep
nan
(x,method) 指定替换原始 x 的
NaN
的方法。 方法可以是
'linear'(默认)对 x
中
的缺失
值
执行线性插
值
, 'nearest' 执行最近邻插
值
, 'spline' 使用 not-a-knot 结束条件执行样条插
值
, 'pchip' 是保形分段三次插
值
, 'cubic' 与 'pchip' 相同, 'v5cubic' 三次卷积通过
Matlab
v5 算法'next' 用 x
中
的下
一个
非
NaN
值
替换 x
中
的
NaN
值
, 'previous' 用 x
中
先前的非
NaN
值
替换 x
中
的
NaN
提醒一下,我们的最终项目涉及对“图像融合:使用基于补丁的合成方法来合并不一致的图像”这一文章的研究。
可以在“图像融合”文件夹
中
找到用于此研究的不同算法。
确切地说,我们将本研究的图像克隆算法与我们在2020年秋季会议上进行的实验室2的泊松方法(位于labo2文件
中
)的算法进行比较,所有代码均已在
Matlab
中
进行了编码。
在“图像融合”文件夹
中
,有几个文件,但最让我们感兴趣的是ImageCloning.m
HoleFilling.m和TextureInterpolation.m文件。
这些文件包含研究的各个算法。
其他文件是do_EM
_...和do_poisson_iterations的不同文件。
do_EM
_...文件用于执行其各自算法的基本综合迭代。
他们依次调用函
数
do_poisson_iterations来求解泊松方程的投影。
每个综合执行约30次迭代,进行约10个缩放。
我们还找到了
一个
Mexfiles文件夹,其
中
包含
Matlab
脚本形式的函
数
,该函
数
允许搜索和投票不同的补丁,这些补丁可以填充目标图
该算法的灵感来自于 John D'Errico 的工作https://www.mathworks.com/
matlab
central/fileexchange/4551-inpaint_
nan
s
但是,我确实注意到,与 griddata 相比,John D'Ericco 给出的 inpaint_
nan
s 算法提供了更高的梯度。 因此,该算法提供了另一种解决方案,有些人可能会觉得它很有帮助。
matlab
中
的
NAN
例如函
数
sin(x)/x在x=0处,使用
matlab
算其
值
,在x=0处的
值
会是
NAN
,因为
matlab
会把0/0识别为
NAN
,而无法计算,更何况这个函
数
是
x=-4:0.01:4
y=sin(x)./x
这样不连续地产生的,
matlab
更没有理由去理解这个函
数
...
可以使用逻辑索引来替换元胞
数
组
中
的
NaN
值
,具体步骤如下:
1. 通过逻辑运算符 `is
nan
` 创建
一个
逻辑索引,将
NaN
值
标记为True,非
NaN
值
标记为False。
2. 使用逻辑索引来选择元胞
数
组
中
的
NaN
值
。
3. 将选择的
NaN
值
替换为0。
示例代码如下:
```
matlab
% 创建包含
NaN
值
的元胞
数
组
A = {1, 2,
NaN
, 4,
NaN
};
% 创建逻辑索引,将
NaN
值
标记为True
idx = is
nan
(A);
% 使用逻辑索引来选择元胞
数
组
中
的
NaN
值
,并将其替换为0
A(idx) = {0};
执行代码后,元胞
数
组A的
值
为 `{1, 2, 0, 4, 0}`。