最近更新 / 特别专题 / 我要上传 / 设为首页
满足眼睛的需求

频道精选


MATLAB “非数”和“空”数组

2007-02-20 来源:xuezhishi.com   内容报错                        

3.12 “非数”和“空”数组

3.12.1 非数NaN

【 * 例 3.12.1 -1 】非数的产生和性质演示。

(1)非数的产生
a=0/0,b=0*log(0),c=inf-inf
Warning: Divide by zero.
a =
NaN
Warning: Log of zero.
b =
NaN
c =
NaN

(2)非数的传递性
0*a,sin(a)
ans =
NaN
ans =
NaN

(3)非数的不可比较性
a==nan % 该指令想计算“ a 等于非数吗?”。但不能给出正确的判断结果。
ans =
0

 

 

(4)非数不能进行关系运算
a~=nan % 该指令“ a 不是非数吗?”,也不可能给出正确的判断结果。
a==b % 两个非数不存在“等”与“不等”的概念
b>c % 两个非数不能比较大小
ans =
1
ans =
0
ans =
0

 

 

(5)非数的属性判断
class(a) % 数据类型归属
isnan(a) % 该指令是唯一能正确判断非数的指令。
ans =
double
ans =
1

【 * 例 3.12.1 -2 】非数元素的寻访
% 创建带非数的二维数组
rand('state',0) % 将随机发生器置 0 。目的是使读者便于把自己运算结果与本书对照。
R=rand(2,5);R(1,5)=NaN;R(2,3)=NaN
R =
0.9501 0.6068 0.8913 0.4565 NaN
0.2311 0.4860 NaN 0.0185 0.4447

isnan(R) % 对数组元素是否非数进行判断
ans =
0 0 0 0 1
0 0 1 0 0

% 找出非数元素的位置标识
Linear_index=find(isnan(R)) % 非数的“单下标”标识
[r_index,c_index]=ind2sub(size(R),Linear_index); % 转换成“全下标”标识
disp('r_index c_index'),disp([r_index c_index])
Linear_index =
6
9
r_index c_index
2 3
5


3.12.2 “空”数组

【 * 例 3.12.2 -1 】关于“空”数组的算例。

(1)创建“空”数组的几种方法
a=[],b=ones(2,0),c=zeros(2,0),d=eye(2,0),f=rand(2,3,0,4)
a =
[]
b =
Empty matrix: 2-by-0
c =
Empty matrix: 2-by-0
d =
Empty matrix: 2-by-0
f =
Empty array: 2-by-3-by-0-by-4

 

 

(2)“空”数组的属性
class(a) % “空”的数据类别
isnumeric(a) % 是数值数组类吗
isempty(a) % 唯一可正确判断数组是否“空”的指令
ans =
double
ans =
1
ans =
1
which a % 变量 a 是什么
ndims(a) % 数组 a 的维数
size(a) %a 数组的大小
a is a variable.
ans =
2
ans =
0 0


(3)“空”数组不具备一般的传递性
b_c1=b.*c % 两个空阵的点乘
b_c2=b'*c % 矩阵乘一。注意:生成矩阵为 0-by-0 ,故“空”。
b_c3=b*c' % 矩阵乘二。注意:生成矩阵为 2-by-2 。
b_c1 =
Empty matrix: 2-by-0
b_c2 =
[]
b_c3 =
0 0
0 0

(4)“空”数组的比较要谨慎
a==b % 结果解释不合理
Warning: [] == X is technically incorrect. Use isempty(X) instead.
ans =
0
b==c % 结果可合理解释为“无法比较”
ans =
Empty matrix: 2-by-0
c>d % 结果可合理解释“无法比较”
ans =
Empty matrix: 2-by-0

a==0 % 结果可解释为“不等于”
Warning: Future versions will return empty for empty == scalar comparisons.
ans =
0
a~=0 % 结果解释为“是不等”
Warning: Future versions will return empty for empty ~= scalar comparisons.
ans =
1

(5)没有“空”数组参与运算时,结果中的“空”有合理的解释
A=reshape(-4:5,2,5) % 创建一个数值数组 A
A =
-4 -2 0 2 4
-3 -1 1 3 5

L2=A>10 % 检查 A 中大于 10 的元素位置
find(L2) % 找出 L2 逻辑数组中非 0 元素的“单下标”标识。
L2 =
0 0 0 0 0
0 0 0 0 0
ans =
[]
 

(6)“空”数组用于子数组的删除和大数组的维数收缩(参见例 3.11.3 -5 )
A(:,[2,4])=[] % 删除 A 的第二、四列
A =
-4 0 4
-3 1 5

评论 点击查看
 

精彩图片