【问题标题】:Subscripted assignment dimension mismatch in matlabmatlab中的下标赋值尺寸不匹配
【发布时间】:2015-04-28 20:46:35
【问题描述】:

我使用特征矩阵 517*11 和标签矩阵 517*1 执行了这段代码。但是一旦矩阵的维度发生变化,代码就无法运行。我该如何解决这个问题?

错误是:

下标分配维度不匹配。 在这一行: 边(k,j) = quantlevels(a);

这是我的代码:

function [features,weights] = MI(features,labels,Q)
if nargin <3
    Q = 12;
end

edges = zeros(size(features,2),Q+1);

for k = 1:size(features,2)

    minval = min(features(:,k));
    maxval = max(features(:,k));
    if minval==maxval
        continue;
    end

    quantlevels = minval:(maxval-minval)/500:maxval;

    N = histc(features(:,k),quantlevels);

    totsamples = size(features,1);

    N_cum = cumsum(N);

    edges(k,1) = -Inf;

    stepsize = totsamples/Q;

    for j = 1:Q-1
        a = find(N_cum > j.*stepsize,1);
        edges(k,j) = quantlevels(a);
    end

    edges(k,j+2) = Inf;
end

S = zeros(size(features));
for k = 1:size(S,2)
    S(:,k) = quantize(features(:,k),edges(k,:))+1;   
end


I = zeros(size(features,2),1);
for k = 1:size(features,2)   
    I(k) = computeMI(S(:,k),labels,0);
end


[weights,features] = sort(I,'descend');

%% EOF


function [I,M,SP] = computeMI(seq1,seq2,lag)

if nargin <3
    lag = 0;
end

if(length(seq1) ~= length(seq2))
    error('Input sequences are of different length');
end

lambda1 = max(seq1);
symbol_count1 = zeros(lambda1,1);

for k = 1:lambda1
    symbol_count1(k) = sum(seq1 == k);
end

symbol_prob1 = symbol_count1./sum(symbol_count1)+0.000001;

lambda2 = max(seq2);
symbol_count2 = zeros(lambda2,1);

for k = 1:lambda2
    symbol_count2(k) = sum(seq2 == k);
end

symbol_prob2 = symbol_count2./sum(symbol_count2)+0.000001;


M = zeros(lambda1,lambda2);
if(lag > 0)
    for k = 1:length(seq1)-lag
        loc1 = seq1(k);

        loc2 = seq2(k+lag);

        M(loc1,loc2) = M(loc1,loc2)+1;
    end
else
    for k = abs(lag)+1:length(seq1)
        loc1 = seq1(k);

        loc2 = seq2(k+lag);

        M(loc1,loc2) = M(loc1,loc2)+1;
    end
end

SP = symbol_prob1*symbol_prob2';


M = M./sum(M(:))+0.000001;

I = sum(sum(M.*log2(M./SP)));

function y = quantize(x, q)
x = x(:);
nx = length(x);
nq = length(q);
y = sum(repmat(x,1,nq)>repmat(q,nx,1),2);

【问题讨论】:

    标签: matlab


    【解决方案1】:

    我已经多次运行该函数而没有出现任何错误。 我已用作“seq1”和“seq2”数组的输入,例如1:1011:20

    循环中可能出现错误

    for k = 1:lambda1
       symbol_count1(k) = sum(seq1 == k);
    end
    

    如果“seq1”和“seq2”被定义为矩阵,因为sum将返回一个数组,而 symbol_count1(k) 预计为单值。

    如果seq1seq2 不是整数类型,则可能会出现另一个错误,因为它们在

    中用作索引
    M(loc1,loc2) = M(loc1,loc2)+1;
    

    希望这会有所帮助。

    【讨论】:

    • 感谢您的回复,但我认为我复制代码时出错了。现在这里是原始代码,错误在“edges(k,j) = quantlevels(a);”中
    猜你喜欢
    • 2013-12-23
    • 2017-10-28
    • 2015-06-24
    • 2014-12-14
    • 1970-01-01
    • 2013-05-30
    • 2013-07-03
    • 1970-01-01
    相关资源
    最近更新 更多