MATLAB выдаляць некаторыя Нулі з Матрыцы

Я бачыў шмат адказаў пра тое, як выдаліць вядучыя і/або канчатковыя нулі, і як выдаліць усе нулі з вектару ці матрыцы. Што мне трэба зрабіць, хоць, гэта выдаліць толькі некаторыя з іх. У мяне ёсць дзве матрыцы, і я толькі хачу, каб выдаліць запісы, дзе абодва з іх роўныя нулю. Яны ўяўляюць сабой двухмерныя каардынаты х і у, вырашаецца з дапамогай характарыстык (я магу даць больш падрабязную інфармацыю, калі гэта неабходна), і я проста хачу, каб выдаліць значэння, дзе абедзве матрыцы утрымліваюць нулі на адных і тых жа паказчыкаў. Я магу лёгка пераўтварыць матрыцы ў вектары і працаваць з вектарамі, так што любая дапамога ў любым выпадку было б вельмі ўдзячны.

1
Гэта кропка пытання. Я вырашэнні DX/ДЦ = і, ду/дх = v, DC/DS = - \ тэта г (с), і я выкарыстоўваю 2D інтэрпаляцыі так атрымаць і і V значэнні па параметрызацыі, што дае мне наступныя х і ў значэння з выкарыстаннем прамога Эйлера. Колькасць элементаў у х і ў вектара змены для кожнай пачатковай кропкі, хоць. Любое дадатковае прастору, якое не прызначаецца ў дадзеным радку толькі што значэнне 0. Я хачу, аднак, з = 2 у пункце (х, у) = (0,0), у той час як я атрымаю кучу запісаў, разумелых з (0,0) = 0, так што я хачу, каб выдаліць пункту, дзе з (0 , 0) = 0. Паспрабую абодва метаду ніжэй, і паглядзець, які з іх лепш. Дзякуючы.
дададзена аўтар Jeff, крыніца
Як вы прапануеце, каб выдаліць элементы з сярэдзіны 2D-матрыцы?
дададзена аўтар Oliver Charlesworth, крыніца

1 адказы

Для прастаты, давайце выкажам здагадку, што вы карыстаецеся вектары называюцца X і Y (той жа даўжыні), і вы хочаце выдаліць толькі тыя запісы, дзе абодва вектару нуль. Вось як (не праверана):

% Find the indexes where either X or Y is different from zero
% (these are the indexes of the components we want to keep)
I = find(X~=0 | Y~=0);

% Select the desired components from X and Y
X=X(I);
Y=Y(I);

Змяніць: Як Олі паказаў ніжэй (і Stefano патлумачана), вы павінны выкарыстоўваць лагічнае індэксаванне для павышэння прадукцыйнасці.

5
дададзена
@MartinB - галоўная выгада апускаючы знайсці функцыі. Гэта часта робіць прасцей код, каб прытрымлівацца.
дададзена аўтар eykanal, крыніца
Дзякуй за вашу дапамогу, усё. Я выкарыстаў тое, што Олі прапанаваў з лагічнай індэксацыяй і гэта фантастыка. Дзякуючы кучу.
дададзена аўтар Jeff, крыніца
Прыбіральнік: I = (X == 0 & Y == 0); Х (I) = []; Y (I) = []; г.зн. выкарыстоўваючы лагічную індэксацыю.
дададзена аўтар Oliver Charlesworth, крыніца
@Oli: Шчыра цікава - як гэта чысцей, то ёсць якія перавагі?
дададзена аўтар Martin B, крыніца
@stefano: Дзякуй - не ведаў пра гэта!
дададзена аўтар Martin B, крыніца
@MartinB - не толькі чысцей, але калі вы набераце X (знайсці (Y == то)), рэдактар ​​MATLAB прапануе вам выправіць яе, выдаліўшы функцыю «знайсці», з паведамленнем: «Для таго, каб павысіць прадукцыйнасць, выкарыстоўвайце лагічную індэксацыю замест таго, каб знайсці »
дададзена аўтар stefano, крыніца