Ошибка Matlab: не одноэлементные размеры двух входных массивов должны совпадать - PullRequest
2 голосов
/ 25 ноября 2011

У меня есть массив 1000x1, в котором я хотел бы разделить его на равные части на основе лямбда-значения lam_packet, а затем в каждой части я бы заменял 0 0 0 0 двоичными значениями radom, но всякий раз, когда я вызываю эту функциюя получаю сообщение об ошибке

??? Error using ==> bsxfun
Non-singleton dimensions of the two input arrays must match each other.

Error in ==> imputation at 11
idx = bsxfun(@plus, idx', (0:3));

, пожалуйста, любая помощь будет принята с благодарностью.

function [ xxx ] = imputation(x,lam_packet,noframes)
x1=x(:,1:-1:1).';
for i=1:lam_packet:noframes
%# starting locations of four-consecutive zeros
idx= strfind(x1(i), [0 0 0 0]);

%# random binary numbers (rows) used to replace the consecutive zeros
n = dec2bin(randi([0 8],[numel(idx) 1]),4) - '0';

%# linear indices corresponding to the consecutive-zeros
idx = bsxfun(@plus, idx', (0:3));

%'# replace the 4-zeros
xx = x1;
xx(idx(:)) = n(:);
end
xxx = xx(1:-1:1,:).';

end
enter code here

1 Ответ

0 голосов
/ 25 ноября 2011

idx является результатом вызова "strfind", который возвращает расположение всех строк [0 0 0 0].Таким образом, это массив произвольного размера, размер массива зависит от содержимого «x1».Таким образом, это, вероятно, не длина 4. Поскольку другой вход для bsxfun имеет длину 4, вы получите ошибку.

...