AMcoder - javascript, python, java, html, php, sql

Կրկնվող մատրիցային տողերի միջով օկտավայում առանց ինդեքսի կամ հանգույցի օգտագործման

Ես փորձում եմ հասկանալ, թե հնարավո՞ր է Octave-ն ավելի արդյունավետ օգտագործել՝ հեռացնելով «for» օղակը, որը ես օգտագործում եմ X մատրիցայի յուրաքանչյուր տողի բանաձևը հաշվարկելու համար.

myscalar = 0
for i = 1:size(X, 1),
  myscalar += X(i, :) * y(i) % y is a vector of dimension size(X, 1)
  ...

Բանաձևն ավելի բարդ է, քան սկալարի ավելացումը: Հարցն այստեղ իրականում այն ​​է, թե ինչպես կարելի է կրկնել X տողերի միջով առանց ինդեքսի, որպեսզի ես կարողանամ վերացնել for հանգույցը:

09.09.2012

  • Ես չեմ հասկանում, թե ինչ է պետք անել ձեր կոդը: Յուրաքանչյուր օղակում այն ​​պարզապես բազմապատկում է X(i,:) վեկտորը y(i) սկալյարով: Ձեր myscalar-ն իրականում վեկտոր է: Եթե ​​X-ը միայն մեկ սյունակ չունի, բայց ինչո՞ւ են այն դնում: Իսկ ինչո՞ւ եք փոխադրում բազմապատկման համար: Բացի այդ, կարիք չկա օգտագործել size (X, 1)-ը, Octave-ն արդեն ունի rows և columns ֆունկցիաները հենց այս նպատակների համար: 09.09.2012
  • Իմ հարցն իսկապես վերաբերում է այդ օղակին, ոչ թե կոնկրետ որևէ կոդին: Ճիշտ է, transpose-ը շփոթեցնող է, ուստի ես պատրաստվում եմ ուղղել այն, բայց կա՞ տարբերակ հեռացնելու ինդեքսավորումը և for loop-ը: 09.09.2012
  • հավանաբար այո, բայց ես չեմ կարող ձեզ ասել, թե ինչպես, քանի որ ծածկագիրը իմաստ չունի: Արդյո՞ք myscalar-ը պետք է սկալյար լինի: Բազմապատկումների գումարո՞ւմ։ Մատրիցա՞ Ինչ չափի: Ես չեմ հասկանում, թե ինչ եք ուզում։ 09.09.2012
  • լավ, ես ուղղել եմ myscalar-ը, բայց չեմ հասկանում, թե ինչու է այդքան կարևոր կենտրոնանալ կոդի վրա: Սա ընդհանուր հարց է, կա՞ որևէ միջոց խուսափելու մատրիցային ինդեքսավորումից յուրաքանչյուր տողի կամ սյունակի վրա բանաձևեր կիրառելիս, այլ ոչ թե յուրաքանչյուր տարրի վրա (որ դեպքում վեկտորացումն ավելի ակնհայտ է): 09.09.2012
  • հիմա իմաստ ունի. Ես չհասկացա, թե ինչ է կատարվում myscalar-ի հետ, քանի որ դուք պարզապես վերագրում էիք դրա վրա նախկինում, ոչ թե ավելացնում դրա վրա (=՝ +=-ի փոխարեն): 09.09.2012

Պատասխանները:


1

Այո, դուք կարող եք օգտագործել հեռարձակումը դրա համար (դուք անհրաժեշտ է 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
  • Հնարավո՞ր է նույն բանն անել Octave-ում 3.6 տարբերակով, կարող է լինել (2.4): 06.12.2013
  • @Kaha չկա 2.4 տարբերակ (2.0.16-ին հաջորդել է 2.9.14-ը): Բայց դա կարելի է անել նաև այնքան ժամանակ, քանի դեռ bsxfun-ն իրականացվում է: Ես խմբագրել եմ իմ պատասխանը՝ ավելի հին տարբերակների համար այլընտրանք ցույց տալու համար: 06.12.2013
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..