Overwriting information in a cell array
3 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
Sindar
2020 年 11 月 9 日
編集済み: Sindar
2020 年 11 月 9 日
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 件のコメント
Sindar
2020 年 11 月 9 日
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]}
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Matrices and Arrays についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!