Overwriting information in a cell array
3 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
I am working with cell arrays and matrices. I am trying to overwite information in a cell but instead it places the new data into a new cell and retains a copy of the old data in a deeper cell if that makes sense. As a result, when I try to index into the cells I am grabbing the old data instead of the information I am looking for. I read the cell array page and thought I understood, but I guess I am missing something. The cell array in question is BranchMatrixRevised. If someone could help me either index into the proper cell or overwrite the old information that would be great. My code is below.
clear
close
clc
A = [0,0,0;0.00977495601952172,0.0129188554738323,0.999868768093125;-0.566794094824837,-0.823750570492204,0.0133959578031223;0.0279587435128966,0.0380588867245362,1.99938731654588;0.830388266617646,0.583999369869120,0.978401571089338;-1.07826433834531,-1.64452537544960,0.267810795303313;0.168715496407312,0.263085998125572,2.96351922435162;-0.791458202545459,0.611268411797120,0.998070417818667;-1.41124221175034,-0.289407593850698,0.0506110237693017;1.69942938355116,1.04462646221878,1.15892918358242;-1.55216375501531,-2.44987966243271,0.623934110066297;0.188310075544404,0.501770043093754,3.93441879647330;-1.44603145623221,1.35107113546187,1.15371676572365;-2.35391403973316,0.0183196401577155,0.179737992978120;2.59879677816763,1.38804628951095,1.42948622326796;-1.92629974765512,-3.28302931738291,1.03122259685150;0.190461468181228,0.731318108759712,4.90771374511875;-2.01837467713375,2.14014570650778,1.37684130228734;-3.30531517848174,0.217844651708771,0.414313445558867;3.50709118523837,1.65551615551852,1.75113998255253;-2.23204460424917,-4.13488361866807,1.45650407075820;0.193343935566412,0.934427321909631,5.88686559182864;-2.51244231909718,2.97180232130260,1.63030617210704;-4.25650570961388,0.357419056329789,0.689550723301627;4.41845060685608,1.87363023778730,2.10021053665969;-2.47842156351806,-4.99324597672323,1.90651791078471;0.204283419234320,1.13357858075284,6.86677329350173;0.617793464714887,0.0559247730198438,6.10612769252045;-2.96417360323821,3.81704174520463,1.91580426879081;-5.20242439373799,0.476408999682868,0.991344090368801;5.32672360772571,2.06445068867013,2.47253796167180;-2.69346338350278,-5.85030685131976,2.37470982965291;0.218591936197924,1.32878562119851,7.84743096960627;-3.26247612265381,-4.91985596911837,1.29018005288354;1.20197539596291,-0.580347098756520,6.61000225666269;-3.37592827171665,4.67443410026770,2.22457026832058;-6.14584567995603,0.584770610127789,1.30473528056482;6.23299868743130,2.22581272192086,2.86321400922248;-2.89467385558292,-6.70726873056154,2.84918921113506;0.209717491582492,1.53184472980862,8.82655723451965;5.28440710514136,1.17097130314088,2.91964410258613;0.576278852478300,2.24513662818586,7.66753960818188;-4.04653068178957,-4.84646596151352,0.673842194982372;1.72465217643194,-1.18852390077965,7.20743841278270;-3.76500316313530,5.53715317053961,2.54758193166533;-7.08499357301506,0.666849489054822,1.63829830698843;7.13773556686645,2.38268963160310,3.25924533904186;-3.08850223839479,-7.56458389242937,3.32609724340970;0.176682672356017,1.77636612069925,9.79563823738556;5.70892694024996,0.283366758099107,3.09836478191717;0.834848920291403,3.20098548783449,7.80716223363894;2.23645813228566,-1.80307906039568,7.80775218019269;-4.13663420978661,6.40608142770811,2.87446730769027;-8.01389420090031,0.739303774953617,2.00147044244114;8.04005085003118,2.54735749010561,3.65763161659614;-3.28567882346993,-8.41947317913047,3.80597816799600;0.151573909742903,2.03767830086445,10.7605659520551;-6.82918401328041,0.278600280775844,2.52363667248442;-3.41363523840503,-7.08870431609608,4.14330417016278;6.35396040499232,-0.474663609164808,3.19491420795479;1.06216210967955,4.10256481833496,8.17524296492560;2.75275937858220,-2.40442829800382,8.41751616527277;-4.49887555491066,7.27474744137621,3.21240304800297;-8.93747200633802,0.809847032829654,2.37833604988111;8.93679366464217,2.75035659507643,4.05087923302196;-3.49679202503365,-9.27121011623096,4.28553567873291;0.120474891403918,2.30220475044321,11.7244428158357;-6.57337445354577,-0.109648927503134,3.40897503798041;-3.90131441220521,-6.94494653825290,5.00440969491056;7.05097560070378,-1.18529470189817,3.29069138158143;1.32262284552297,4.97356081042056,8.59180771001900;3.28964279764057,-2.99261263184027,9.02232637002263;-4.85227421135047,8.14355948795292,3.55920993569369;-9.85594939518955,0.878289437178573,2.76784204913582;9.82550611659926,2.98592839011066,4.44419349302377;-3.72248319429006,-10.1171476702764,4.76870557719025;0.0788524583019931,2.54046289454804,12.6947523694476;2.70499218347696,-3.21391766868317,7.83232794441650;-2.84203085926377,-9.70887276953909,3.66930583711619;-6.31756489381112,-0.497898135782113,4.29431340347640;-4.51675110863053,-6.94038338635526,5.79258280428302;7.75826716048403,-1.87839080959415,3.42981878707837;1.60739083428736,5.83327554833172,9.01583337197052;3.81380630124427,-3.57090289370221,9.64749274349896;-5.21110077179350,9.00941019096056,3.90784450027642;-10.7701023523524,0.936847376158581,3.16895966118096;10.7111773842992,3.23085322898537,4.83865290649108;-3.95158917741763,-10.9629681728992,5.25047121091495;0.0248941422755761,2.76290060345524,13.6682049701363;-3.96468559986903,8.59207273742804,3.45422268973630;-4.53038653298116,-10.2195319906366,4.18835254129213;-0.734431529015096,3.08504028776024,12.4898020857790;-2.18726969349390,-10.1465354228472,3.05307599549947;-5.19378789303215,-7.06258274529947,6.51831588830272;8.48339326062922,-2.55215288868641,3.57207489297718;1.87742850700644,6.69346716517060,9.44844178339196;4.34166392226097,-4.13247115672692,10.2846798572246;-5.56586475306079,9.87609452074379,4.25855918503254;-11.6790955983398,1.00013474235130,3.58093780141378;11.5912722790929,3.48104407126623,5.24218421704439];
x = A(:, 1);
y = A(:, 2);
z = A(:, 3);
SizeofA = size(A,1);
dist1a = nan(numel(x)); % places nans on the diagonal after distance calculation
proximity = 1.000;
save_criteria = 3;
for i = 1:SizeofA
for j = 1:(i-1)
dist1a(i,j) = sqrt((x(i)-x(j)).^2 + (y(i)-y(j)).^2 + (z(i)-z(j)).^2);
dist1a(j,i) = dist1a(i,j);
end
end
i2keep = find(sum((dist1a - proximity <= eps('single')), 2) >= save_criteria);
keep_x1 = x(i2keep);
keep_y1 = y(i2keep);
keep_z1 = z(i2keep);
B = [keep_x1, keep_y1, keep_z1];
C = 1:SizeofA;
index = ismember(C,i2keep);
D = A(~index,:);
%%
dist1b = pdist2(B, D);
[~, minRowIdx] = min(dist1b,[],1);
[GroupID, GroupList1] = findgroups(minRowIdx);
NeighborGroups1 = splitapply(@(x){x},D,GroupID(:));
SizeNG1 = size(NeighborGroups1,1);
%%
for i = 1:SizeNG1
test1{i} = pdist2(B(GroupList1(i),:), NeighborGroups1{i});
end
%%
for i = 1:SizeNG1
test4a = find(test1{1,i} - proximity <= eps('single'));
test4b{i} = test4a;
end
%%
for i = 1:size(B,1)
[BranchMatrix{i}]= BranchLinks(B(i,:));
end
%%
for i = 1:size(B,1)
[NeighborMatrix] = NeighborDetector(test4b{i},NeighborGroups1{i});
BranchMatrix{1,i} = [BranchMatrix(i), NeighborMatrix];
end
%%
x_c = 0;
y_c = 0;
z_c = 0;
Center = [x_c,y_c,z_c];
for i = 1:length(BranchMatrix)
dist1c(i,:) = pdist2(Center,BranchMatrix{1,i}{1,1});
end
%%
BranchMatrixRevised = BranchMatrix;
for i = 1:length(BranchMatrixRevised)
[DownstreamMatrix] = DownstreamDetector(Center,dist1c(i),BranchMatrix{1,i}{1,2});
BranchMatrixRevised{1,i}= [BranchMatrixRevised(i), DownstreamMatrix];
end
%%
for i = 1:length(BranchMatrixRevised)
dist1e{i,:} = pdist2(BranchMatrix{1,i}{1,2},D);
end
%%
function [NeighborMatrix] = NeighborDetector(test4b,NeighborGroups1)
for i = 1:length(test4b)
NeighborMatrix(i,:) = NeighborGroups1(test4b(i),:);
end
end
function [BranchMatrix] = BranchLinks(B)
BranchMatrix = B;
end
function [DownstreamMatrix] = DownstreamDetector(Center,dist1c,BranchArray)
dist1d = pdist2(Center,BranchArray);
for i = 1:size(BranchArray,1)
if dist1c > dist1d(i) && length(dist1d) > 2 && dist1d(i) == min(dist1d)
DownstreamMatrix(i,:) = NaN(1,3);
else
DownstreamMatrix(i,:) = BranchArray(i,:);
end
end
end
0 Commenti
Risposta accettata
Sindar
il 9 Nov 2020
Modificato: Sindar
il 9 Nov 2020
Braces access cell contents, allowing you to update (in this case, appending to the end and hoping it's a compatible shape)
BranchMatrixRevised{1,i}= [BranchMatrixRevised{i}, DownstreamMatrix];
parentheses access the ith cell, not it's contents
2 Commenti
Sindar
il 9 Nov 2020
In my opinion, your original line should throw an error, since you are trying to concatenate a cell and something that is presumably numeric. But, it turns out not to be the case, as we see here:
x=[{1} 1]
x =
1×2 cell array
{[1]} {[1]}
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Matrices and Arrays in Help Center e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!