gpt4 book ai didi

matlab - 创建具有相同行的新表的有效方法,但每行重复不同次数

转载 作者:行者123 更新时间:2023-12-03 17:03:27 27 4
gpt4 key购买 nike

假设我创建了这个表和一个值数组:

names = {'a'; 'b'; 'c'; 'd'} ; values = {'1'; '2'; '3'; '4'};
originalTable = table(names, values, 'VariableNames', {'names', 'values'});

nRepeat = [10, 50, 100, 2] ;

我想创建一个新表,其中将包含每行重复 nRepeat 相应索引的次数,即我将第一行或原始表重复 10 次,然后是原始表的第二行重复50次,以此类推...此外,我想在新表中添加一个包含重复索引的列。

我做了什么:

% Initialize newTable to allocate memory space
totalRepetitions = sum(nRepeat) ;

% Repeated first row of the original table the same number of times as the totalRepetitions that will happen, also adding the new column with the index of repetition
newTable = repmat([originalTable(1,:), array2table(1, 'VariableNames', {'idxRepetition'})], totalRepetitions , 1) ;

addedRows = 0 ;
for idxName = 1 : numel(originalTable.names)

newTable(addedRows +1 : addedRows + nRepeat(idxName) , :) =...
[repmat(originalTable(idxName ,:), nRepeat(idxName), 1), array2table( (1:1:nRepeat(idxName))', 'VariableNames', {'idxRepetition'}) ] ;

addedRows = addedRows + nRepeat(idxName);
end

这行得通,但对于大表来说它变得非常慢。

有没有更有效的方法来做到这一点?

最佳答案

您可以简单地使用 repelem在索引上:

indx = repelem((1:numel(nRepeat)),nRepeat);
idxrep = arrayfun(@(x) 1:1:x,nRepeat,'un',0)'
finalTable = [originalTable(indx, :), table([idxrep{:}]','VariableNames', {'idxRepetition'})];

决赛 table :

162×3 table

names values idxRepetition
_____ ______ _____________

'a' '1' 1
'a' '1' 2
'a' '1' 3
'a' '1' 4
'a' '1' 5
'a' '1' 6
'a' '1' 7
'a' '1' 8
'a' '1' 9
'a' '1' 10
'b' '2' 1
'b' '2' 2
'b' '2' 3

关于matlab - 创建具有相同行的新表的有效方法,但每行重复不同次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51893097/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com