我有一个5 x 600,000的矩阵。我想对数据进行分组,所以我想根据第4列中的值将此矩阵分组为子矩阵。对于0到500之间的值,我需要一个矩阵;对于501到1000之间的值,我需要另一个矩阵;对于1001到1500之间的值,我需要另一个矩阵。我该怎么做呢?我目前没有任何可靠的材料,我在网上看到过一些例子,但它们似乎只有2个变量(即在一列中有值1或0,并将1和0分组为2个子矩阵)。
68de4m5k1#
我认为在Matlab语言中,你的意思是你有一个n × m矩阵,其中n=600000,m=5,但如果不是,你可以相应地改变。这就是你想做的吗
n=600000; m=5; thisCol =4; values_range = {[0,500];[501,1000];[1001,1500]}; % cell array of vectors myMatrix = zeros(n,m); myMatrix(:,thisCol) = 1:600000; % to prove it works. theseSubMatrices = cell(length(values_range),1); % cell array of matrices for j=1:length(values_range) thisLow= values_range{j}(1); thisHigh= values_range{j}(2); theseSubMatrices{j} = myMatrix(myMatrix(:,thisCol)>=thisLow & myMatrix(:,thisCol)<=thisHigh,:); end
cx6n0qe32#
如果你有一些数据
arr = rand( 6e5, 5 ); % 5 columns / 600,000 rows arr(:,5) = arr(:,5) .* 1500; % for this example, get column 5 into range [0,1500]
然后,您可以使用histcounts根据您的边缘“bin”第5列。
histcounts
edges = [0, 500, 1000, 1500]; % edges to split column 5 by [~,~,iSubArr] = histcounts( arr(:,5), edges );
并生成每个子数组一个元素的单元数组
nSubArr = numel(edges)-1; % number of bins / subarrays subArrs = arrayfun( @(x) arr( iSubArr == x, : ), 1:nSubArr, 'uni', 0 ); % Get a matrix per bin
输出:
subArrs = 1×3 cell array {200521×5 double} {199924×5 double} {199555×5 double}
2条答案
按热度按时间68de4m5k1#
我认为在Matlab语言中,你的意思是你有一个n × m矩阵,其中n=600000,m=5,但如果不是,你可以相应地改变。
这就是你想做的吗
cx6n0qe32#
如果你有一些数据
然后,您可以使用
histcounts
根据您的边缘“bin”第5列。并生成每个子数组一个元素的单元数组
输出: