Filter löschen
Filter löschen

How to compute var on each matrix of a cell array?

2 Ansichten (letzte 30 Tage)
Ahmed
Ahmed am 7 Feb. 2024
Kommentiert: Stephen23 am 7 Feb. 2024
I have G = 1 * 227 cell and of each element has size 116 3. I and to compute variance of G e.g.,it should compute each matrix of G. I tried this way but not working
abc = var(G{K}) (if K = 1:227)
it gives e.g., abc = [a b c] onlyy three values.
How I can do it get

Antworten (1)

Avni Agrawal
Avni Agrawal am 7 Feb. 2024
Hi Nisar,
I understand that you are trying to compute the variance of each matrix within a cell array `G`, where `G` is a 1x227 cell array and each element of `G` is a 116x3 matrix.
The MATLAB function `var` computes the variance along each column of a matrix by default. If you apply `var` to each cell in the cell array using the syntax `var(G{K})`, it will give you a 1x3 vector for each matrix in the cell array, where each element of the vector is the variance of the corresponding column in the matrix. To compute the variance for each matrix in the cell array and store the results in a new array, you can use a loop or a cell function like `cellfun`. Here is how you can do it with a loop:
% Assuming G is a 1x227 cell array, with each cell containing a 116x3 matrix
variances = zeros(227, 3); % Preallocate a matrix to store the variances
for K = 1:227
variances(K, :) = var(G{K}); % Compute variance for each matrix and store it
end
If you want to compute the overall variance for each entire matrix (not column-wise), you would need to reshape each matrix into a vector and then compute the variance. Here is how you can do that:
% Assuming G is a 1x227 cell array, with each cell containing a 116x3 matrix
overall_variances = zeros(227, 1); % Preallocate a vector to store the overall variances
for K = 1:227
matrix_as_vector = G{K}(:); % Reshape the matrix into a vector
overall_variances(K) = var(matrix_as_vector); % Compute overall variance and store it
end
If you want to use `cellfun` to avoid explicit looping, it would look like this:
% For column-wise variance
variances = cellfun(@(x) var(x), G, 'UniformOutput', false);
variances = cell2mat(variances); % Convert cell array to a regular matrix
% For overall variance
overall_variances = cellfun(@(x) var(x(:)), G);
In the `cellfun` examples, `variances` will be a 227x3 matrix with the column-wise variances, and `overall_variances` will be a 227x1 vector with the overall variances of each matrix in the cell array `G`.
I hope this helps.
  4 Kommentare
Ahmed
Ahmed am 7 Feb. 2024
Bearbeitet: Ahmed am 7 Feb. 2024
@Stephen23 Thanks, it is working and then is this one correct?
N = 15
for K=1:227
C = cellfun(@var, G, 'UniformOutput', false);
VN = C{:,:}./N; % Is this correct divide all C with N like this? How I can divide a cell by N
stdN = sqrt(C./N);
ND = data{K,1} + stdN.*randn(size(data{K,1})); % the size of data{K,1} 116 227
end
Stephen23
Stephen23 am 7 Feb. 2024
" it is working and then is this one correct?"
You are mixing up CELLFUN and a FOR-loop. You do not need both. Pick which one you want to use.
"Is this correct divide all C with N like this?"
No, it looks like you are tying to treat a cell array like a table. Cell arrays are not tables.
Both Avni Agrawal and I showed you how to use CELL2MAT. You should use CELL2MAT or a comma-separated list and e.g. VERTCAT:
vertcat(C{:})
"How I can divide a cell by N"
Cell arrays cannot be divided by anything.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Characters and Strings finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by