下标索引必须是实数正整数或逻辑数

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-1i 在最后一个循环中从 0 开始。 @TarikMokafih:看我的新版本

以上是关于下标索引必须是实数正整数或逻辑数的主要内容,如果未能解决你的问题,请参考以下文章

下标索引必须是实数正整数或逻辑数

MATLAB 错误:下标索引必须是实数正整数或逻辑数

Matlab-下标索引必须是实数正整数或逻辑数

MATLAB“下标索引必须是真正的正整数或逻辑”

下标索引必须是真正的正整数或逻辑,通用解决方案

“数组索引必须是正整数或逻辑值”