I have a loop but only the last value saves

i want to see the individual peak shifts for 520. i see it as a weird output with disp but i want it in my variables not an output in the command window. the bolded line is what i want to see all the values for before the mean. for sens_peak_shift_data_520 i only see the means there but i do not want to alter that because i am graphing from that variable. please help!
for i= 1:length(sens_legend)
data_set= sens_legend{i};
peak_520=[]; prom=[]; width=[]; peak_260=[];
sens_shifted_peak=[];
for k = 1:length(data_set)
data= data_set{k};
absorbance= data(:, 2)/(max(data(321:1221, 2)));
wavelength= data(:, 1);
data_n = [wavelength, absorbance];
[pk, loc, w, p]= findpeaks(absorbance, wavelength, "MinPeakProminence", 0.08);
[maxvalue, index] = max(data_n(651:1221,2));
peak_520 = [abs(data_n(index+650,1))-520, peak_520];
disp(peak_520)
sens_shifted_peak= [sens_shifted_peak, peak_520];
end
sens_peak_shift_data_520= [sens_peak_shift_data_520; [mean(peak_520, 2) std(peak_520,0,2) CI(1) CI(2) CI(3) CI(4)]];

8 Kommentare

Adam Danz
Adam Danz am 23 Mär. 2023
I formatted your code to make it easier to read. This also un-formatted the bold line.
It sound like you want the values stored in sens_shifted_peak.
Chelsie Boodoo
Chelsie Boodoo am 23 Mär. 2023
Thanks i want the output of peak_520 but it only shows the last value from there instead of all of them
Adam Danz
Adam Danz am 23 Mär. 2023
It looks like you're storing those values in sens_shifted_peak assuming you aren't getting an error message.
Chelsie Boodoo
Chelsie Boodoo am 23 Mär. 2023
Theres no error but its giving me only a 1x3. it should be at least 27 values on sens_shifted_peak_data_520 it has the values but the first column is the mean(peak_520,2)
Chelsie Boodoo
Chelsie Boodoo am 23 Mär. 2023
after end if i try something like stored520=[sens_peak_shift_data_520;[peak_520, 2]];
i get this error
Error using vertcat
Dimensions of arrays being concatenated are not consistent.
Error in feed (line 129)
stored520=[sens_peak_shift_data_520;[peak_520, 2]];
Adam Danz
Adam Danz am 23 Mär. 2023
It's difficult to visualize what's going on here. You're increasing the number of values in this line
peak_520 = [abs(data_n(index+650,1))-520, peak_520];
and then storing them again in this line
sens_shifted_peak= [sens_shifted_peak, peak_520];
We don't know what sens_legend or data_set are, particularly their size, so we have no way of confirming what size the output should be. If you provide variable values so we can run your code, that would help.
This is the entire code with the file containing the data thanks for your help
close all
clear
clc
%%OPEN ALL FILES FOR PROBE
data_info7=readmatrix("12_14_2022 feed_water.xlsx");
j=1333;%rows in each set
%CHANGE i TO NUMBER OF MEASURMENTS PER FILE
for i=1:84
k= 1331;
set5{i}= data_info7((1333*i)-1322:(1333*i)-2,1:2);
end
none= zeros(1321,2);
none(50, 2)= 10000;
none(661, 2)= 1000;
none(141, 2)= 1000;
k= 190.0;
for i = 1:1321
none(i,1)= k;
k= k+0.5;
end
%%SENSITIVITY CALCULATIONS
%ctrl 5,10,15 min
sens_c_1= [set5(1), set5(8), set5(44), set5(51)];
sens_c_2=[set5(15), set5(22), set5(58), set5(65)];
sens_c_3=[set5(29), set5(36), set5(72), set5(79)];
%148 no MNPs
sens_1_1= [set5(2), set5(3), set5(4)];
sens_1_2=[set5(16), set5(17), set5(18)];
sens_1_3=[set5(30), set5(31), set5(32)];
%148 mnp
sens_2_1= [set5(5), set5(6), set5(7)];
sens_2_2=[set5(19), set5(20), set5(21)];
sens_2_3=[set5(33), set5(34), set5(35)];
%181 no MNPs
sens_3_1= [set5(9), set5(10), set5(11)];
sens_3_2=[set5(23), set5(24), set5(25)];
sens_3_3=[set5(37), set5(38), set5(39)];
%181 MNP
sens_4_1= [set5(12), set5(13), set5(14)];
sens_4_2=[set5(26), set5(27), set5(28)];
sens_4_3=[set5(40), set5(41), set5(42)];
%238 no MNPs
sens_5_1= [set5(45), set5(46), set5(47)];
sens_5_2= {none};
sens_5_3=[set5(73), set5(74), set5(75)];
% 238 MNPs
sens_6_1= [set5(48), set5(49), set5(50)];
sens_6_2= {none};
sens_6_3=[set5(76), set5(77), set5(78)];
%293 no MNPs
sens_7_1= [set5(52), set5(53), set5(54)];
sens_7_2=[set5(66), set5(67), set5(68)];
sens_7_3=[set5(80), set5(81), set5(82)];
%293 MNPs
sens_8_1= [set5(55), set5(56), set5(57)];
sens_8_2=[set5(69), set5(70), set5(71)];
sens_8_3=[set5(83), set5(84)];
%%IF REMOVE A CATERGORY REMOVE FROM LEGEND BELOW
sens_legend=[{sens_c_1},{sens_c_2},{sens_c_3},{sens_1_1},{sens_1_2},{sens_1_3},{sens_2_1},{sens_2_2},{sens_2_3},{sens_3_1},{sens_3_2},{sens_3_3},{sens_4_1},{sens_4_2},{sens_4_3},{sens_5_1},{sens_5_2},{sens_5_3},{sens_6_1},{sens_6_2},{sens_6_3},{sens_7_1},{sens_7_2},{sens_7_3},{sens_8_1},{sens_8_2},{sens_8_3}];
%%DONT NEED TO CHANGE BELOW UNLESS WANT TO MEASURE SOMETHING NEW
sens_peak_shift_data_520= []; sens_prom_shift_data= []; sens_width_data= []; sens_peak_shift_data_260= [];
sens_s500_550=[]; sens_s550_600=[]; sens_s500_600=[]; sens_s250_275=[]; sens_s275_300=[]; sens_s250_300=[];
sens_ratio_620_520=[]; sens_ratio_625_520=[];
for i= 1:length(sens_legend)
data_set= sens_legend{i};
peak_520=[]; prom=[]; width=[]; peak_260=[];
sl500_550=[];
sl550_600=[];
sl500_600=[];
sl250_275=[];
sl275_300=[];
sl250_300=[];
sens_shifted_peak=[];
r_620_520=[];
r_625_520=[];
for k = 1:length(data_set)
data= data_set{k};
absorbance= data(:, 2)/(max(data(321:1221, 2)));
wavelength= data(:, 1);
data_n = [wavelength, absorbance];
%UNCOMMENT TO SEE ALL INDIVIDUAL ABSORBANCE GRAPHS TO SEE WHICH
%PEAK ITS PICKING UP MAY NEED TO ADJUST MINPEAKPROMINANCE
% figure;
% findpeaks(absorbance, wavelength, "MinPeakProminence", 0.08);
[pk, loc, w, p]= findpeaks(absorbance, wavelength, "MinPeakProminence", 0.08);
[maxvalue, index] = max(data_n(651:1221,2));
peak_520 = [abs(data_n(index+650,1))-520, peak_520];
disp(peak_520)
sens_shifted_peak= [sens_shifted_peak, peak_520];
peak_260= [(loc(2)-260)/2, peak_260];
prom= [p(end), prom];
width= [w(end), width];
sl500_550= [(absorbance(721)-absorbance(621))/50, sl500_550];
sl550_600= [(absorbance(821)-absorbance(721))/50, sl550_600];
sl500_600= [(absorbance(821)-absorbance(621))/100, sl500_600];
sl250_275= [(absorbance(171)-absorbance(121))/25, sl250_275];
sl275_300= [(absorbance(221)-absorbance(171))/25, sl275_300];
sl250_300= [(absorbance(221)-absorbance(121))/50, sl250_300];
r_625_520= [(absorbance(871))/(absorbance(661)), r_625_520];
r_620_520=[(absorbance(861))/(absorbance(661)), r_620_520];
end
%%ConInterval function at bottom of code
%%returns SE, tcrit, Lower limit 95%, upper limit95%
%LOOK AT THIS FOR EACH PEAK SHIFT VALUE PER MEASURMENT
sens_shifted_peak_data{i}= sens_shifted_peak;
CI=ConInterval(peak_520);
stored520=[sens_peak_shift_data_520;[peak_520, 2]];
sens_peak_shift_data_520= [sens_peak_shift_data_520; [mean(peak_520, 2) std(peak_520,0,2) CI(1) CI(2) CI(3) CI(4)]];
CI=ConInterval(peak_260);
sens_peak_shift_data_260= [sens_peak_shift_data_260; [mean(peak_260, 2) std(peak_260,0,2) CI(1) CI(2) CI(3) CI(4)]];
CI=ConInterval(prom);
sens_prom_shift_data= [sens_prom_shift_data; [mean(prom, 2) std(prom, 0,2) CI(1) CI(2) CI(3) CI(4)]];
CI=ConInterval(width);
sens_width_data= [sens_width_data; [mean(width, 2) std(width,0,2) CI(1) CI(2) CI(3) CI(4)]];
CI=ConInterval(sl500_550);
sens_s500_550=[sens_s500_550; [mean(sl500_550, 2) std(sl500_550,0,2) CI(1) CI(2) CI(3) CI(4)]];
CI=ConInterval(sl550_600);
sens_s550_600=[sens_s550_600; [mean(sl550_600, 2) std(sl550_600,0,2) CI(1) CI(2) CI(3) CI(4)]];
CI=ConInterval(sl500_600);
sens_s500_600=[sens_s500_600; [mean(sl500_600, 2) std(sl500_600,0,2) CI(1) CI(2) CI(3) CI(4)]];
CI=ConInterval(sl250_275);
sens_s250_275=[sens_s250_275; [mean(sl250_275, 2) std(sl250_275,0,2) CI(1) CI(2) CI(3) CI(4)]];
CI=ConInterval(sl275_300);
sens_s275_300=[sens_s275_300; [mean(sl275_300, 2) std(sl275_300,0,2) CI(1) CI(2) CI(3) CI(4)]];
CI=ConInterval(sl250_300);
sens_s250_300=[sens_s250_300; [mean(sl250_300, 2) std(sl250_300,0,2) CI(1) CI(2) CI(3) CI(4)]];
CI=ConInterval(r_620_520);
sens_ratio_620_520=[sens_ratio_620_520;[mean(r_620_520, 2), std(r_620_520,0,2) CI(1) CI(2) CI(3) CI(4)]];
CI=ConInterval(r_625_520);
sens_ratio_625_520=[sens_ratio_625_520;[mean(r_625_520, 2), std(r_625_520,0,2) CI(1) CI(2) CI(3) CI(4)]];
end
81.5000 74.5000 81.5000 86.0000 74.5000 81.5000 61.5000 86.0000 74.5000 81.5000 107.5000 126.5000 107.5000 133.5000 126.5000 107.5000 107.0000 133.5000 126.5000 107.5000
Error using vertcat
Dimensions of arrays being concatenated are not consistent.
sens_data=[{sens_peak_shift_data_520}, {sens_prom_shift_data}, {sens_width_data}, {sens_peak_shift_data_260},{sens_s500_550}, {sens_s550_600}, {sens_s500_600}, {sens_s250_275}, {sens_s275_300}, {sens_s250_300},{sens_ratio_625_520}, {sens_ratio_620_520}];
%%GRAPHS ALL DATA
%%LIST OF TITLES FOR EACH CATERGORY OF GRAPHS
titles= ["Peak Shift at 520 nm", "Peak Prominance at Shifted Peak", "Peak Width at 520 nm", "Peak Shift at 260 nm", "Slope 500-550 nm", "Slope 550-600 nm", "Slope 500-600 nm", "Slope 250-275 nm", "Slope 275-300 nm", "Slope 250-300 nm", "Ratio 625/520 values","Ratio 620/520 values"];
%SENSITIVITY GRAPHS
time= ["5", "10", "15"];
for m = 1:length(sens_data)
%TYPE IS WHAT CATERGORY OF DATA ITS MEASURING, PEAKSHIFT, WIDTH,...
type= sens_data{m};
bar_graph_data=[];
error_data=[];
for i= 1:length(time)
bar_graph_data= [bar_graph_data; type(i,1), type(i+length(time),1), type(i+(2*length(time)),1), type(i+(3*length(time)), 1), type(i+(4*length(time)), 1),type(i+(5*length(time)), 1),type(i+(6*length(time)), 1), type(i+(7*length(time)), 1),type(i+(8*length(time)), 1)];
error_data= [error_data; type(i,2), type(i+length(time),2), type(i+(2*length(time)),2), type(i+(3*length(time)), 2), type(i+(4*length(time)), 2),type(i+(5*length(time)), 2),type(i+(6*length(time)), 2),type(i+(7*length(time)), 2), type(i+(8*length(time)), 2)];
C= [type(i,1);type(i,2);type(i,3); type(i,4); type(1,5); type(i,6)];
T1= [type(i+length(time),1);type(i+length(time),2);type(i+length(time),3); type(i+length(time),4); type(1+length(time),5); type(i+length(time),6)];
T2= [type(i+(2*length(time)),1);type(i+(2*length(time)),2);type(i+(2*length(time)),3); type(i+(2*length(time)),4); type(1+(2*length(time)),5); type(i+(2*length(time)),6)];
T3= [type(i+(3*length(time)),1);type(i+(3*length(time)),2);type(i+(3*length(time)),3); type(i+(3*length(time)),4); type(1+(3*length(time)),5); type(i+(3*length(time)),6)];
MT1= [type(i+(4*length(time)),1);type(i+(4*length(time)),2);type(i+(4*length(time)),3); type(i+(4*length(time)),4); type(1+(4*length(time)),5); type(i+(4*length(time)),6)];
MT2= [type(i+(5*length(time)),1);type(i+(5*length(time)),2);type(i+(5*length(time)),3); type(i+(5*length(time)),4); type(1+(5*length(time)),5); type(i+(5*length(time)),6)];
MT3= [type(i+(6*length(time)),1);type(i+(6*length(time)),2);type(i+(6*length(time)),3); type(i+(6*length(time)),4); type(1+(6*length(time)),5); type(i+(6*length(time)),6)];
MT4= [type(i+(7*length(time)),1);type(i+(7*length(time)),2);type(i+(7*length(time)),3); type(i+(7*length(time)),4); type(1+(7*length(time)),5); type(i+(7*length(time)),6)];
MT5= [type(i+(8*length(time)),1);type(i+(8*length(time)),2);type(i+(8*length(time)),3); type(i+(8*length(time)),4); type(1+(8*length(time)),5); type(i+(8*length(time)),6)];
end
figure;
hold on
x=[1,2,3,4,5,6,7,8,9];
b= bar(x, bar_graph_data);
%MAKES 3X5 ARRAY, IF CHANGED SIZE THEN CHANGE 3X5 SIZE
% EX: 3 TIMES, 5 CATERGORIES
xpos = nan(3, 9);
%CHANGE i AGAIN IF REMOVED A TIME CATERGORY
for i = 1:length(time)
xpos(i,:) = b(i).XEndPoints;
end
errorbar(xpos, bar_graph_data, error_data,'k','linestyle','none');
%%CHANGE GRAPH LABELS AS YOU PLEASE
set(gca, 'xticklabel',{'C';'1';'1 MNP';'2';'2 MNP';'3';'3 MNP';'4';'4 MNP'},'FontSize', 16);
xlabel("Sample", 'FontSize', 18);
legend({'5 min', '10 min', '15 min'}, 'Location', 'best','FontSize', 14);
title("Feed:" +titles(m), 'FontSize', 20);
hold off
end
%CACLULATED CONFIDENCE INTERVAL FUNCTION
%%https://www.mathworks.com/matlabcentral/answers/159417-how-to-calculate-the-confidence-interval
function data= ConInterval(x)
SEM = std(x,0,2)/sqrt(length(x));
ts = tinv([0.05 0.95],length(x)-1);
CI_info = mean(x,2) + (ts*SEM);
data= [SEM ts(2) CI_info(1) CI_info(2)];
end
Chelsie Boodoo
Chelsie Boodoo am 24 Mär. 2023
Hi @Adam Danz were you able to look at the code yet? Thank you so much for your help and time.

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Dinesh
Dinesh am 5 Apr. 2023

0 Stimmen

Hi Chelsie.
It seems that you want to store the individual peak shifts for 520 in a variable rather than displaying them in the command window using "disp". To achieve this, you can create an additional variable to store the peak shifts for each dataset in "sens_legend". I added a new variable named "all_peak_shifts_520" that will store the peak shifts for all datasets.
You can create the "all_peak_shifts_520" variable as an empty cell array before the main for loop:
all_peak_shifts_520 = {};
After the inner for loop, you can store the peak shifts for the current dataset.
all_peak_shifts_520{end+1} = peak_520;
Now, you can access the individual peak shifts for 520 for each dataset in the "sens_legend" by indexing "all_peak_shifts_520". For example, to access the peak shifts for the first dataset, use "all_peak_shifts_520{1}". This will not affect the "sens_peak_shift_data_520" variable.

3 Kommentare

Thanks for your response. i added the code below but it only gives a 1x1 cell in the workspace just saying 107,107 instead of all of the peak shifts
all_peak_shifts_520 = {};
all_peak_shifts_520{end+1} = peak_520;
Hi Chelsie. I'm not able to understand why this is happening. But, the code will store all the peak shifts for every item in "sens_legend". Since the inner loop calculates all the peak shifts for each item in "sens_legend", the following line after the inner for loop will store that peak shift in a new array.
all_peak_shifts_520{end+1} = peak_520;
Either the place where you included this piece of code is wrong or the sizes of "sens_legend" and "data_set" might just be 1 in this case since its showing 1x1 cell in the workspace.
Thank you for your help it works!

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Axes Appearance finden Sie in Hilfe-Center und File Exchange

Gefragt:

am 23 Mär. 2023

Kommentiert:

am 7 Apr. 2023

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by