下标索引必须是实数正整数或逻辑数
Posted
技术标签:
【中文标题】下标索引必须是实数正整数或逻辑数【英文标题】:Subscript indices must either be real positive integers or logicals 【发布时间】:2012-04-14 07:58:23 【问题描述】:我的matlab函数代码出现以下错误:
???。
==> AFA 在 15 时出错 M(k,j) = 均值(T(i:sze,j));
这是问题所在的代码部分:
sz =size(T);
lim = sz(2) - ordre;
M = zeros(sz(1),sz(2));
r= 0;
for j=1:sze,
k = 1;
for i=1:lim,
M(k,j) = mean(T(i:i+ordre,j));
k = k + 1;
end
for i=lim+1:sz(2),
M(k,j) = mean(T(i:sz(2),j));
k = k + 1;
end
end
【问题讨论】:
听起来ordre
为零,然后lim+1 > sz(2)
。只是猜测......
不,此时实际上是 ordre=5
matlab 能否将数据打印到屏幕或日志文件?您能否让它在该函数调用之前打印所有变量的状态,然后查看日志以查看它抱怨的索引是什么?
【参考方案1】:
以下内容对我有用,没有错误
T = magic(25);ordre = 5; %# I make up some values here
sz =size(T);
lim = sz(2) - ordre;
%# I've added a check here
if lim < 1, error('ordre has to be at most sz(2)-1 (is %i)',ordre);end
M = zeros(sz(1),sz(2));
r= 0;
for j=1:sz(2), %# I needed to change this line (sz(1) works as well)
k = 1;
for i=1:lim,
M(k,j) = mean(T(i:i+ordre,j));
k = k + 1;
end
for i=lim+1:sz(2),
M(k,j) = mean(T(i:sz(2),j));
k = k + 1;
end
结束
【讨论】:
是的,而不是将 sz(1) 放入您修改的行中,而是尝试放入 sz(2),因为在我的情况下 sze = sz(2)。 @TarikMokafih:一切都适用于sz(2)
。 T
的大小是多少?
我刚刚尝试过你的,它正在工作,但是当 T 是我传递给函数的输入矩阵时它不起作用(T 是一个大小为 100*4 的整数矩阵)跨度>
@TarikMokafih:因为你的数组有四列,ordre
是 5,lim
是 -1
,i
在最后一个循环中从 0 开始。
@TarikMokafih:看我的新版本以上是关于下标索引必须是实数正整数或逻辑数的主要内容,如果未能解决你的问题,请参考以下文章