I have two prealocated matrices I'm trying to populate using a for loop, but I keep getting this error:
"Unable to perform assignment because the left and right sides have a different number of elements."
here is the code:
% Load the neuron table
load neuronTable.mat;
ctrl_neuronTable = neuronTable(strcmp(neuronTable.condition,'control'),:);%just the control FOVs
ipRGC_neuronTable = ctrl_neuronTable(strcmp(ctrl_neuronTable.iprgcID,"yes"),:); %just the ipRGCs
RGC_neuronTable = ctrl_neuronTable(strcmp(ctrl_neuronTable.iprgcID,"none"),:); %just the RGCs
% Two useful vars here for the rest of the code
listFOVs = unique(ctrl_neuronTable.movie_name); %List of unique FOVs
numFOVs = length(listFOVs); %total num of FOVs
total_ipRGCs = length(ipRGC_neuronTable.neuronNum);
total_RGCs = length(RGC_neuronTable.neuronNum);
%Initializing some vars that we will fill in the for loop
ctrl_cellPartRGC = nan(total_RGCs,1);
ctrl_cellPartIPRGC = nan(total_ipRGCs,1);
ctrl_meanAmpRGC = nan(total_RGCs,1);
ctrl_meanAmpIPRGC = nan(total_ipRGCs,1);
allIPRGCids = [];
allMaxCellAmps = [];
numEvents = neuronTable.numWaves;
for i = 1:numFOVs
% for i = 1:1 %This line for testing code
%generate tempTable of current FOV
tempTable = ctrl_neuronTable(strcmp(ctrl_neuronTable.movie_name,listFOVs(i)),:);
numWaves = tempTable.numWaves(i); %total num of waves
numCells = size(tempTable,1);
%Calc amp of cells when they participate in waves
indWhenWavesHappen = tempTable.cellPart;
indWhenWavesHappen(isnan(indWhenWavesHappen)) = 0;
cellAmps = tempTable.maxCellAmp;
cellAmps(isnan(cellAmps)) = 0;
ampOfCellsDuringWaves = indWhenWavesHappen.*cellAmps;
[ii,~,v] = find(ampOfCellsDuringWaves); %These two lines calc mean without counting zeros
meanCellAmps = accumarray(ii,v,[],@mean);
tempTable.meanCellAmps = meanCellAmps;
allIPRGCids = [allIPRGCids;tempTable.iprgcID];
allMaxCellAmps = [allMaxCellAmps;meanCellAmps];
% extract the ipRGC and rgc info to intialize variable with ipRGC and rgc avg part per FOV
ctrlTable = tempTable(strcmp(tempTable.iprgcID,'none'),:);
ipRGCTable = tempTable(strcmp(tempTable.iprgcID,'yes'),:);
%Calc percent wave part of each cell type and export to vars we initialized
ctrl_cellPartRGC(i) = sum(ctrlTable.cellPart,2, 'omitnan')./numWaves(i);
ctrl_cellPartIPRGC(i) = sum(ipRGCTable.cellPart,2, 'omitnan')./numWaves(i);
ctrl_meanAmpRGC(i) = mean(ctrlTable.meanCellAmps);
ctrl_meanAmpIPRGC(i) = mean(ipRGCTable.meanCellAmps);
end
The two variables are
ctrl_cellPartRGC ( size = 5655) and ctrl_cellPartIPRGC (size = 1175)
as the loop iterates through the different numFOVs, the right side of the line populating the two matrices changes. this is expected, as tI want the right side to be saved into the matrices after each iteration. I'm not sure what I need to change. Any ideas?

댓글 수: 2

Stephen23
Stephen23 2021년 5월 25일
@Christiane Voufo: please show us the complete error message. This means all of the red text. Do not edit it.
Hi Stephen,
here is the full error message:
Unable to perform assignment because the left and right sides have a different number of elements.
Error in cellPart3 (line 53)
ctrl_cellPartRGC(i) = sum(ctrlTable.cellPart,2, 'omitnan')./numWaves(i);

댓글을 달려면 로그인하십시오.

답변 (1개)

Jan
Jan 2021년 5월 25일

0 개 추천

Use the debugger to examine the problem:
dbstop if error
Then run the code again. When Matlab stops at the error, check the sizes of the variables:
% ctrl_cellPartRGC(i) = sum(ctrlTable.cellPart,2, 'omitnan')./numWaves(i);
size(i)
size(ctrlTable.cellPart)
size(sum(ctrlTable.cellPart,2, 'omitnan'))
size(numWaves(i))
I assume in this line:
ctrlTable = tempTable(strcmp(tempTable.iprgcID,'none'),:)
a 2D matrix is replied instead of the expected row vector.

댓글 수: 1

Hi Jan,
thank you for that. I did as you suggested and confirmed what i was already aware of, which is that the left and right side of line 53 are not equal, but I was expecting that to not be an issue if I was trying to populate the variable on the left side of the equation on each iteration of the loop.

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Debugging and Improving Code에 대해 자세히 알아보기

제품

릴리스

R2021a

질문:

2021년 5월 25일

댓글:

2021년 5월 25일

Community Treasure Hunt

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

Start Hunting!

Translated by