Error using 'splitapply' when the first bin has no entries
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I am writing a function to take the values from a cell array, split them according the the values in the second column of each cell and then get the average for each cell.
I am running into an issue where in one of the instances the first bin has no values that go in it and then I get this issue
Error using splitapply (line 111)
For N groups, every integer between 1 and N must occur at least once in the vector of group numbers.
I have looked around at old question but am unable to find a solution to my problem.
Note 1 - A function that returns an (:,2) array. The first column contained amplitudes to frequency spikes
Note 2 - The location the error occurs at
Thank you
%function z = Band_Divider(Frequencies, band_width)
% --- TEST SETUP ---
clear;
x = audioread("Recordings\Speaker Male\2\21.wav");
Frequencies = FFT_Output(x, 2, 5); %% NOTE 1 This function takes an audio signal and identifies the peak frequencies per word section. The frequencies are stored in a cell
band_width = 30;
% --- END ---
% --- SETUP ---
Word_Breakdown = zeros(4,(300/band_width));
bins = 0:(band_width):300;
% --- LOOP ---
for i=1:4
array = Frequencies{i}
Seperators = discretize(array(:,2), bins)
Bands = splitapply(@(x) {x}, array, Seperators) % NOTE 2 The error occurs at this line
for j=1:height(Bands)
Band_Value = Bands{j}(:,1)
Word_Breakdown(i,j) = mean(Band_Value);
end
end
%end
%--- TEST PRINTS ---
Word_Breakdown
%--- END ---
0 commentaires
Réponse acceptée
Dyuman Joshi
le 19 Oct 2023
array = Frequencies{i};
Seperators = discretize(array(:,2), bins);
Bands = accumarray(Seperators, array, [], @(x) {x})
5 commentaires
Stephen23
le 20 Oct 2023
Modifié(e) : Stephen23
le 20 Oct 2023
"Second input VAL must be a vector with one element for each row in SUBS, or a scalar."
Is your 2nd input a vector or a scalar? (hint: no)
I am guessing that you intended to only input the first column of ARRAY:
accumarray(Seperators, array(:,1), [], @(x) {x})
Is there a good reason why you don't simply calculate the mean directly?:
accumarray(Seperators, array(:,1), [], @mean)
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Measurements and Spatial Audio dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!