查看: 1987|回复: 1|关注: 0

[已解决] MATLAB 为什么报错“数组索引必须为正整数或逻辑值。”?

[复制链接]

15

主题

30

帖子

0

最佳答案
  • 关注者: 2
发表于 2019-6-28 18:36:16 | 显示全部楼层 |阅读模式
MATLAB 为什么报错“数组索引必须为正整数或逻辑值。”?

15

主题

30

帖子

0

最佳答案
  • 关注者: 2
 楼主| 发表于 2019-6-28 18:39:21 | 显示全部楼层
本帖最后由 TS-boys 于 2019-6-28 18:45 编辑

索引数组时,如果使用不是正整数或逻辑值的索引值时,会发生此报错。以下是导致此报错时的一些建议:
1)仔细检查索引值是否为正整数。MATLAB 中的索引不能为 0,一般情况下从1开始。

2)如果使用逻辑变量索引,请确保索引数组类型为逻辑变量,而不是由1和0组成的double数组。也可以在索引前,将double数组转换为逻辑数组。例如:
  1. A = [1 2 3 4; 5 6 7 8];
  2. ind_double = [0 1 0 1; 0 1 0 1];
  3. ind_logical = logical(ind_double);
  4. A(ind_logical)
复制代码

对索引数组,可以通过 whos 函数查看数据类型,例如:
  1. whos ind_double
  2. whos ind_logical
复制代码

3)如果使用浮点算法来计算索引数组, 则数组值可能不是整数精度。如果知道索引值非常接近整数,则可以用 round 函数,例如:
  1. A = [1 2 3 4; 5 6 7 8];
  2. ind_float = 2.00001;
  3. ind_int = round(ind_float);
  4. A(ind_float)
复制代码

4)当定义了一个与 MATLAB 内建函数重名的变量时,该函数会被覆盖,于是产生同样的报错(调用函数的传参和数组索引都使用相同的括号),例如:
  1. max = rand(5);  
  2. A = rand(5);  
  3. max(A)
复制代码

此时,需要另外分配变量名,并清除冲突的变量名:
  1. B = max;  
  2. clear max max(A)
复制代码


关于索引的其他问题,请参考:
https://www.mathworks.cn/help/matlab/math/matrix-indexing.html


答案来源:
www.mathworks.cn/matlabcentral/answers/102145-why-do-i-get-the-error-subscript-indices-must-either-be-real-positive-
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表