Այո, դուք կարող եք օգտագործել հեռարձակումը դրա համար (դուք անհրաժեշտ է 3.6.0 կամ ավելի ուշ): Եթե դուք գիտեք python, սա նույնն է (բացատրություն python-ից) . Պարզապես բազմապատկեք մատրիցը սյունակով: Ի վերջո, cumsum
-ն ավելացնում է, բայց մենք ուզում ենք միայն վերջին շարքը:
newx = X .* y;
myscalars = cumsum (newx, 1) (end,:);
կամ մեկ տողում՝ առանց ջերմաստիճանի փոփոխականների
myscalars = cumsum (X .* y, 1) (end,:);
Եթե չափերը ճիշտ են, հեռարձակումն իրականացվում է ավտոմատ կերպով: Օրինակ:
octave> a = [ 1 2 3
1 2 3
1 2 3];
octave> b = [ 1 0 2];
octave> a .* b'
warning: product: automatic broadcasting operation applied
ans =
1 0 6
1 0 6
1 0 6
octave> a .* b
warning: product: automatic broadcasting operation applied
ans =
1 2 3
0 0 0
2 4 6
Զգուշացման պատճառն այն է, որ դա նոր գործառույթ է, որը կարող է շփոթեցնել օգտատերերին և գոյություն չունի Matlab-ում: Դուք կարող եք ընդմիշտ անջատել այն՝ ավելացնելով warning ("off", "Octave:broadcast")
ձեր .octaverc
ֆայլին
Բոլորի համար, ովքեր օգտագործում են Octave-ի հին տարբերակը, նույնը կարող է իրականացվել՝ անմիջապես զանգահարելով bsxfun
ին:
myscalars = cumsum (bsxfun (@times, X, y), 1) (end,:);
09.09.2012
bsxfun
-ն իրականացվում է: Ես խմբագրել եմ իմ պատասխանը՝ ավելի հին տարբերակների համար այլընտրանք ցույց տալու համար: 06.12.2013