Keeping columns names but replacing value for iteration
2 ビュー (過去 30 日間)
古いコメントを表示
Christoper Angelo Malayan
2020 年 11 月 20 日
コメント済み: Christoper Angelo Malayan
2020 年 11 月 21 日
Hi all. I'm new at MATLAB and in coding in general. I'm practicing with some modified K-means clustering and I encountered this problem when iterating. I can't seem to figure it out. I uploaded the sample data named 'CCP.xlsx'. This is my code:
A = readtable('CCP.xlsx');
A = sortrows(A,'d','descend');
C = 64;
num_r = length(A.Customer);
num_K = round(sum(A.d / C));
iter = 10;
%getting initial centroid K coordinates
K = A(1:num_K,2:3);
for h = [1:iter]
%finding Euc.distance from K to r
for t = [1:num_K]
for i = [1:num_r]
dist(i,t) = sqrt((K.x(t) - A.x(i))^2 + (K.y(t) - A.y(i))^2);
end
end
dist_T = array2table(dist)
A = [A dist_T]
% unrelated = unrelated code that changes the value of column 'dist1', 'dist2', 'dist3' every iteration
% ......
% ......
% ......
end
When I ran this, it outputs this for the 1st iteration:
A =
10×7 table
Customer x y d dist1 dist2 dist3
________ __ __ __ ______ ______ ______
4 2 19 30 0 16.279 3.1623
2 18 16 30 16.279 0 17
9 1 16 22 3.1623 17 0
7 14 17 20 12.166 4.1231 13.038
8 2 6 19 13 18.868 10.05
5 5 12 17 7.6158 13.601 5.6569
1 13 6 15 17.029 11.18 15.62
3 13 6 15 17.029 11.18 15.62
6 16 9 13 17.205 7.2801 16.553
10 3 6 10 13.038 18.028 10.198
Iteration 1 , success!
But for the 2nd iteration (new values are derived from 'unrelated'), it seems that it wants to add new and separate columns at the end of table A that is also named column 'dist1', 'dist2', 'dist3' and as a result, it outputs this:
dist_T =
10×3 table
dist1 dist2 dist3
______ ______ ______
6.5192 14.866 10.912
15.89 2.8284 13.103
3.8079 15.133 8.9376
12.349 3.6056 10.615
6.5192 16.125 5.7689
2.5495 11.18 3.3287
12.349 8.544 6.9771
12.349 8.544 6.9771
13.946 5 9.2022
6.5192 15.264 4.9679
Error using CCP4 (line 27)
Duplicate table variable name: 'dist1'.
My end-goal is that no matter how many column 'dist#' there is, the code can still run with no problem.
That said, is there a way to just replace the values for columns 'dist1', 'dist2', 'dist3' for every following iteration so that they remain intact as column #5 ,6, 7 for table A?
I've been trying other methods but they all just add new columns at the end of table A named column 'dist1_1', 'dist2_1', 'dist3_1', etc ....
Any help or tips are greatly appreciated. Thank you!
0 件のコメント
採用された回答
Peter Perkins
2020 年 11 月 20 日
You are horzcat'ing tables, and table variable names must be unique. But your two tables both have variables named dist1, dist2, dist3. So you have two choices:
1) modify the var names in the new table to dist4, dist5, dist6, then dist7, dist8, dist9, and so on
2) rather than horzcat'ing, create nested tables, like this:
>> t1 = array2table(rand(5,2),'VariableNames',["d1" "d2"]);
>> t2 = array2table(rand(5,2),'VariableNames',["d1" "d2"]);
>> t = table([1;2;3;4;5],t1,t2,'VariableNames',["X" "T1" "T2"])
t =
5×3 table
X T1 T2
d1 d2 d1 d2
_ ___________________ __________________
1 0.97235 0.70763 0.45469 0.79374
2 0.29313 0.52507 0.42832 0.64548
3 0.2155 0.27734 0.81563 0.93903
4 0.46152 0.017199 0.33228 0.17186
5 0.65587 0.75829 0.76782 0.51153
Or are you trying to overwrite the old dist# variables with the new ones?
A(:,["dist1" "dist2" "dist3"]) = dist_T
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!