I have a loop but only the last value saves

5 次查看(过去 30 天)
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 个评论
Chelsie Boodoo
Chelsie Boodoo 2023-3-23
编辑:Walter Roberson 2023-3-24
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 2023-3-24
Hi @Adam Danz were you able to look at the code yet? Thank you so much for your help and time.

请先登录,再进行评论。

回答(1 个)

Dinesh
Dinesh 2023-4-5
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 个评论
Dinesh
Dinesh 2023-4-7
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.

请先登录,再进行评论。

Community Treasure Hunt

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

Start Hunting!

Translated by