How to create the "for" loop?

I am trying to create 'for' loop for one easy problem. It is a simple subsraction.
Let me explain more about. So i want to calculate "v" by using this formula; v = datainput - XSS
Here, the size of datainput is 34*36 and size of XSS is 34*1296.
Now, the trick is that when the substraction takes place, it should be in a manner that 1st column of datainput - /minus whole XSS, (which will give a matrix of size 34*1296). Likewise for whole 36 columns the substraction should happen. And the final result should be stored in v (of size 34*36*1296).
For this i am attaching the datainput and XSS excel files.

Answers (1)

Loop approach
datainput=rand(34,36);
XSS=rand(34,1296);
%Preallocation
v=zeros(34,36,1296);
for k=1:size(datainput,2)
v(:,k,:)=datainput(:,k)-XSS;
end
Vectorized approach -
V=datainput-permute(XSS,[1 3 2]);
%Ideally one should you tolerance to compare floating point numbers
isequal(v,V)
ans = logical
1

2 Comments

In both appraoches, its showinng error. Size of matrix is not matching.
It's working fine here. How are you importing your data?
XSS=readmatrix('XSS.xlsx');
size(XSS)
ans = 1×2
34 1296
datainput=readmatrix('datainput.xlsx');
size(datainput)
ans = 1×2
34 36
v=zeros(34,36,1296);
for k=1:size(datainput,2)
v(:,k,:)=datainput(:,k)-XSS;
end
V=datainput-permute(XSS,[1 3 2]);
isequal(v,V)
ans = logical
1

Sign in to comment.

Categories

Find more on Statistics and Machine Learning Toolbox in Help Center and File Exchange

Asked:

on 10 Apr 2023

Commented:

on 10 Apr 2023

Community Treasure Hunt

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

Start Hunting!