How to normalize negative values in a data set/ Matrix

Hello Matlab community, I have a large matrix (14680*751), each row contains data that need to be plotted(i.e., supply curve with $ values from $0to $750 on the Y axis, and carbon values on the X axis). The problem is that in each row of the matrix, there are negative values. I need to find a way to "normalize" that part of the data between the largest negative value and zero (or the first positive value basically). I attached an extract of smaller matrix B(5*20) as an example. Any suggestions are very welcome, Thank you so much, Amine
%%%%%%%Extracted data from the Big Matrix (14680*751)
%%%%%%The matrix B is extracted from the big matrix, and it is B(5*20).
%%%%%%Although some of the elements in each row are negative, they do
%%%%%%start as largely negative then start getting less negativem until
%%%%%%eventually become positive. I am trying to account for that
%%%%%%positive/marginal change or increase, because it will not make sense
%%%%%%to draw supply curves with negative values ( in microecon terms)
B=[-1.47050945378040,-1.33723076144265,-1.19710409742796,-1.05106843381422,-0.900466995312922,-0.746914945492757,-0.592176008533142,-0.438045007240660,-0.286240437664041,-0.138313835492564,0.00441798717200874,0.140914454629432,0.270426543336554,0.392489054463601,0.506895095263594,0.613658893661642,0.712972854741569,0.805163805329556,0.890652051537956,0.969915518856181;-0.841090365686416,-0.686274427020633,-0.556431695216317,-0.449093773011548,-0.361384764288333,-0.290371869645241,-0.233288673385882,-0.187655786921658,-0.151328669223115,-0.122499161299674,-0.0996709425690201,-0.0816227428265286,-0.0673679677609770,-0.0561156700226243,-0.0472353342648724,-0.0402264293996578,-0.0346928170470040,-0.0303216587858231,-0.0268662715145261,-0.0241323310815124;-2.64507912619384,-2.40991384421216,-2.17105653546875,-1.93366471136480,-1.70269068347321,-1.48245802198959,-1.27636167919902,-1.08672279348013,-0.914792168536810,-0.760868562974244,-0.624485460634832,-0.504621811603991,-0.399902903949281,-0.308771004232425,-0.229617388582594,-0.160875900735791,-0.101083038049412,-0.0489115411314220,-0.00318456064689654,0.0371234203291033;-2.95276774937878,-2.83569951619061,-2.71526650996296,-2.58659467339223,-2.44880054835685,-2.30197219410272,-2.14655597853063,-1.98323309778354,-1.81288944691232,-1.63659668475129,-1.45558765005061,-1.27122345915643,-1.08495324528020,-0.898268831972023,-0.712657273810505,-0.529554417479638,-0.350302480998157,-0.176114165152570,-0.00804508666750537,0.153024525436801;-2.05772480055009,-1.78667734692683,-1.52520993070707,-1.28101965824359,-1.05961385350071,-0.864075447044489,-0.695268465690161,-0.552316595400815,-0.433173665056002,-0.335151455327047,-0.255334769254064,-0.190866870884295,-0.139120071476573,-0.0977789501638324,-0.0648644005650677,-0.0387217871127744,-0.0179901264477179,-0.00156345495988809,0.0114488783805824,0.0217593252262164]
Y_dollars=(0:19);
%%%%%%For example plot if I plot row 1 from B
plot(B(1,:),Y_dollars)
%%%The resulting graph shows a curve increasing at an increasing rate from
%%%-1.5 to almost 2.8.... Part of the datat is between -1.5 and 0 needs to
%%%be normalized (from what I understand). ..
%%%%The challenge is that I have 14680 of these rows to derive supply
%%%%curves for, and in each row the data vary in the inetevall from
%%%%negative to zero (or to the very first positive value)
%%%The Question: can this be done using a matlab command to normalize the
%%%part of each supply curve/ data in each row to when I draw the curves
%%%they all start from zero (non-negative vlaues basically)?

댓글 수: 2

You have not indicated what they need to be normalized to .
Amine Ben Ayara
Amine Ben Ayara 2016년 12월 22일
편집: Walter Roberson 2016년 12월 22일
Hello Walter,
maybe I am using the wrong word. But I do need to basically adjust the negative part in each row of the entire matrix so when supply curves are drawn they start from zero ( for example in row 1 from the example matrix B; the following elements are negative, yet they get less negative until they reach zero
(-1.47050945378040 -1.33723076144265 -1.19710409742796 -1.05106843381422 -0.900466995312922 -0.746914945492757 -0.592176008533142 -0.438045007240660 -0.286240437664041 -0.138313835492564 0.00441798717200874)
so there is am increase, but when I plot the data in that 1st row as it is, the line starts with negative values, hence misleading

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

 채택된 답변

Image Analyst
Image Analyst 2016년 12월 22일
Another way:
m = magic(11) % Sample data
rowMins = min(m, [], 2)
mMins = repmat(rowMins, [1, size(m, 2)])
normalizedM = m - mMins

추가 답변 (1개)

Walter Roberson
Walter Roberson 2016년 12월 22일
If the normalization is to be done over the whole matrix:
normalized_B = B - min(0, min(B(:)));
If the normalization is to be done per-row:
min_B = max(0, min(B,[], 2));
then
normalized_B = B - min_B; %requires R2016b or later
or
normalized_B = bsxfun(@minus, B, min_B); %R2007a or later

댓글 수: 3

Mr. Roberson! Thank you so much for your amazing and insightful help! HAPPY HOLIDAYS! (If you see this at any point, can you please give me the best advice on how to teach myself and improve in Matlab without having to take any classes?) Amine
Again, Thank you so much Mr.Walter :)

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

카테고리

도움말 센터File Exchange에서 2-D and 3-D Plots에 대해 자세히 알아보기

질문:

2016년 12월 22일

댓글:

2016년 12월 23일

Community Treasure Hunt

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

Start Hunting!

Translated by