如何基于矢量水平连接一个单元格到另一个单元格

1次查看(最近30天)
endystrike
endystrike 2021年4月13日
评论道: endystrike2021年4月13日
你好,
我想水平连接一个标准,基于一个向量这个单元格到另一个单元格。“wl_tmp”单元格内的所有双精度矩阵具有相同的行数,但不具有相同的列数!
我有这个向量,在我的想法中,具有相同值的元素应该组合在一起(从左到右水平连接它们)。
例如:最后一个单元格是“wl_final”:
(wl_tmp wl_final {1} = {1}, wl_tmp {2}, wl_tmp {3}, wl_tmp {4}, wl_tmp {5}, wl_tmp {6}, wl_tmp {7}, wl_tmp {8}, wl_tmp {9}, wl_tmp {10}, wl_tmp {11});
Wl_final {2} = [wl_tmp{12}, wl_tmp{13}];
%等等…
我找到了一个for循环的解决方案,但由于数据量大,它非常慢,我想弄清楚如何使用“accumarray”代替,但我不明白该函数如何确切工作,以及如何使用它为我的目的。
wl_tot =长度(wl_idx);
wl_final =细胞(1、长度(pX_i_ref_wl));%"pX_i_ref_wl"只包含组的名称:在本例中是一个1x11字符串
清晰的tmp
k = 1: wl_tot
如果wl_idx (k) ~ = wl_idx (max (k - 1, - 1)) | | k = = 1
tmp = wl_tmp {k};
其他的
TMP = [TMP, wl_tmp{k}];% #好< AGROW >
结束
如果k = = wl_tot | | wl_idx (k + 1) ~ = wl_idx (k)
wl_final {wl_idx (k)} = tmp;
清晰的tmp
结束
结束
ps:我之前不能对它们进行分组,因为“wl_tmp”来自一个带有切片变量的parfor循环,我希望以后对它们进行分组!

接受的答案

斯蒂芬。
斯蒂芬。 2021年4月13日
编辑:斯蒂芬。 2021年4月13日
X =[1, 1、2、2];
C ={兰德(3,2)兰德(3,1),兰德(3 2),兰德(3,1)};
C {:}
ans = 3×2
0.3878 0.8399 0.9283 0.7467 0.7731 0.5606
ans = 3×1
0.5279 0.0653 0.8680
ans = 3×2
0.5664 0.3253 0.0695 0.4880 0.0237 0.4730
ans = 3×1
0.5007 0.0762 0.1294
方法一:arrayfun
F = @ (x) [C {x = =}];
D = arrayfun (F, 1:马克斯(X),“大学”, 0);
D {:}
ans = 3×3
0.3878 0.8399 0.5279 0.9283 0.7467 0.0653 0.7731 0.5606 0.8680
ans = 3×3
0.5664 0.3253 0.5007 0.0695 0.4880 0.0762 0.0237 0.4730 0.1294
方法二:accumarray
Y = 1:元素个数(X);
F = @ (y) {[C {y}]};
D = accumarray (X (:), Y (:), [], F);
D {:}
ans = 3×3
0.3878 0.8399 0.5279 0.9283 0.7467 0.0653 0.7731 0.5606 0.8680
ans = 3×3
0.5664 0.3253 0.5007 0.0695 0.4880 0.0762 0.0237 0.4730 0.1294

更多的答案(0)

下载188bet金宝搏


释放

R2020a

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!