How to loop column data

Hi,
I have a 200*100 table data. Columns in the table are named as 'Vre1', 'Vre2',...'Vre100'. The table has 200 rows.
I want to loop the table each time use one column for my following calculation.
The first round in the loop:
AnotherData.column1 = min(AnotherData.column1, LoopTable.Vre1);
AnotherData.column2 = min(AnotherData.column2, LoopTable.Vre1);
The second round in the loop would be:
AnotherData.column1 = min(AnotherData.column1, LoopTable.Vre2);
AnotherData.column2 = min(AnotherData.column2, LoopTable.Vre2);
The last round in the loop would be:
AnotherData.column1 = min(AnotherData.column1, LoopTable.Vre100);
AnotherData.column2 = min(AnotherData.column2, LoopTable.Vre100);
And after each loop, my AnotherData should be renamed as AnotherDara1, AnotherDara2, ...AnotherDara100.
Finally, I am should calculate the statistical median of AnotherData.
Please tell me how cna I do that. Thank you.
AnotherData=rand(10,2);
AnotherData=array2table(AnotherData);
LoopTable=rand(10);
for ii=1:10;
X=LoopTable(:,ii); % there's aproblem in this line
AnotherData.AnotherData1 = min(AnotherData.AnotherData1, X);
AnotherData.AnotherData2 = min(AnotherData.AnotherData2, X);
AnotherData{ii} = AnotherData; % how to improve this line to get a statistical median of AnotherData.
end

5 件のコメント

madhan ravi
madhan ravi 2019 年 1 月 15 日
uploading your table would help
QuanCCC
QuanCCC 2019 年 1 月 15 日
I tried this:
for ii=1:100;
X=LoopTable(;,ii);
AnotherData.column1 = min(AnotherData.column1, X);
AnotherData.column2 = min(AnotherData.column2, X);
AnotherData{ii} = AnotherData;
end
Then the AnotherData became a 1*100 cell. Seems inconvience to get the statistical median of AnotherData.
Guillaume
Guillaume 2019 年 1 月 15 日
If the variables in you table are just numbered variables, then there is absolutely no point in using a table. Just use a plain matrix which will be a lot faster to manipulate. Tables have convenient features at the expense of speed. And you're not using any of these features.
Numbered table variables just as numbered plain variables are always a bad idea. Do not do that! It's buggy, it's slow, it's hard to understand and you end up writing code just to manipulate the variable name instead of writing code to manipulate the variable content. Matlab has a very simple mechanism to handle numbered things. The indexing of matrices and cell arrays, so use just one variable and index that instead.
Am I correct in understanding that you want to calculate the minimum of every combination of pairs of columns taken from two different matrices (at present tables). So given a MxN matrix A and a MxP matrix B, you want a MxNxP matrix C where column C(:, n, p) = min(A(:, n), B(:, p))?
QuanCCC
QuanCCC 2019 年 1 月 15 日
HI, yes, you are right. I then turn the tables to array and did the loop.
Now I have a new question: to storage mt result table for each loop than get the median value.
in the loop, I turen the result table to an array, reshaped the array to one column.
So how can I use the loop to store the result? At the end of the loop:
Result = table2array(Result); %result is the table of every loop run
ConResult(i)=result; % this line seems not right.How can I concatenate my array columns together?
MedianResult = median(ConResult);
Bob Thompson
Bob Thompson 2019 年 1 月 15 日
"ConResult(i)=result; % this line seems not right.How can I concatenate my array columns together?'
You are correct that this won't work. You should be looking at something more like this:
ConResults = reshape(Results,[],1);
This will make ConResults a single column of all the data in 'Result'.
I'm not sure why you are indexing ConResult, but I assume it is to store the data for each loop. The way you have it set up now won't work. Currently you are trying to fit an entire array into a single element. This only works if the element you are trying to place the array in is a cell, which requires curly braces to define. If you are looking to add a new column to ConResults, then your indexing should be something more like (:,i).

サインインしてコメントする。

回答 (1 件)

Guillaume
Guillaume 2019 年 1 月 15 日

0 投票

You keep mentioning loops when no loop is ever needed. I'm going to assume I was correct as to the result you want. this can be achieved simply with:
%inputs:
%A: a MxN array (if it was a table convert it to a matrix with yourtable{:, :})
%B: a MxP array
%output: C a MxNxP array where C(:,n, p) = min(A(:, n), B(:, p))
result = min(A, permute(B, [1 3 2])); %That's it! (At least in versions >= R2016b)
After that I'm not sure what you want to calculate. It looks like you want the median, but I'm not sure of what.

カテゴリ

製品

リリース

R2018b

質問済み:

2019 年 1 月 15 日

回答済み:

2019 年 1 月 15 日

Community Treasure Hunt

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

Start Hunting!

Translated by