Массивті кесу - Array slicing

Жылы компьютерлік бағдарламалау, массивті кесу - элементтер жиынтығын аннан шығаратын операция массив және оларды басқа массив ретінде, мүмкін басқаша етіп орайды өлшем түпнұсқадан.

Массивті кесудің жалпы мысалдары а-дан ішкі жолды бөліп алу жіп кейіпкерлерінің «элл«в» сэллo «, жолды немесе бағанды ​​екі өлшемді массивтен шығару немесе а вектор а матрица.

Байланысты бағдарламалау тілі, массив кесіндісін бірізді емес элементтерден жасауға болады. Сонымен қатар тілге байланысты жаңа массивтің элементтері болуы мүмкін бүркеншік ат (яғни, жадыны ортақ массивпен бөлісу).

Егжей

«Бірөлшемді» (бір индексті) массивтер үшін - векторлар, реттілік, жолдар және т.с.с - ең көп таралған операция - бұл нөлдік немесе одан да көп элементтерді шығару. Сонымен, егер бізде элементтер бар вектор болса (2, 5, 7, 3, 8, 6, 4, 1) және біз 3- ден 6-ға дейінгі массив кесіндісін жасағымыз келсе, біз (7, 3, 8, 6). Жылы бағдарламалау тілдері 0-ге негізделген индекстеу сызбасын қолданатын тілім индекстен болады 2 дейін 5.

Кез келген индекстің диапазонын бір мәнге дейін төмендету бұл индексті тиімді түрде жояды. Бұл мүмкіндікті, мысалы, бір өлшемді кесінділерді (векторлар: 3D түрінде, жолдарда, бағандарда және түтіктерде) шығару үшін пайдалануға болады.[1]) немесе үш өлшемді жиымнан алынған екі өлшемді кесінділер (тікбұрышты матрицалар). Алайда, диапазон жұмыс уақытында көрсетілуі мүмкін болғандықтан, тривиальды индекстерді іс жүзінде жою үшін нақты (құрастыру уақыты) жазба қажет болуы мүмкін.

Жалпы массивті тілімдеуді әр тілге а арқылы сілтеме жасау арқылы жүзеге асыруға болады (тілде орнатылған немесе салынбаған) допинг-вектор немесе дескриптор - бірінші массив элементінің адресін, содан кейін әр индекстің диапазонын және индекстеу формуласындағы сәйкес коэффициентті қамтитын жазба. Бұл әдіс сонымен қатар жедел массивке мүмкіндік береді транспозиция, индексті қайтару, қосымша іріктеу және т.б. сияқты тілдер үшін C, онда индекстер әрқашан нөлден басталады, массивтің допинг векторы г. индекстерде кем дегенде 1 + 2 боладыг. параметрлері. Сияқты индекстердің төменгі шекараларына жол беретін тілдер үшін Паскаль, допинг векторына 1 + 3 қажетг. жазбалар.

Егер массивтің абстракциясы нақты теріс индекстерді қолдамаса (мысалы,. Массивтері сияқты) Ада және Паскаль do), содан кейін берілген өлшем үшін тілім шекараларының теріс индекстері кейде сол өлшемдегі массивтің соңынан жылжуды көрсету үшін қолданылады. 1-ге негізделген схемаларда -1 әдетте екіншіден соңғы элементті көрсетсе, 0-ге негізделген жүйеде бұл ең соңғы элементті білдіреді.

Тарих

Кесудің тұжырымдамасы өнертабысқа дейін де белгілі болды құрастырушылар. Тілдік ерекшелік ретінде кесу содан басталған шығар FORTRAN (1957), дизайн бойынша емес, типтің және диапазонның жоқтығының нәтижесі. Тұжырымдама алдын-ала есеп беруде де айтылды IAL (ALGOL 58), синтаксис массив элементінің бір немесе бірнеше индексін (немесе, бұл жағдайда, процедуралық шақырудың) нақты параметр ретінде пайдаланған кезде алып тастауға мүмкіндік береді.

Кеннет Айверсон Келіңіздер APL (1957) өте икемді көп өлшемді массивтерді кесуге ие болды, бұл тілдің экспрессивті күші мен танымалдылығына үлкен үлес қосты.

ALGOL 68 (1968) көп өлшемді массивтерді кесу және кесу мүмкіндіктерін ұсынды.

Массивті кесу құралдары бірнеше заманауи тілдерге енгізілген, мысалы Ada 2005, Боо, Кобра, Д., Фортран 90, Барыңыз, Тот, Matlab, Перл, Python, S-Lang, Windows PowerShell және математикалық / статистикалық тілдер GNU октавасы, S және R.

Әр түрлі бағдарламалау тілдеріндегі тілімдерді кесу кестесі

1966: 66. Фертран

Fortran 66 бағдарламашылары матрицаларды жол бойынша кесудің артықшылығын ғана пайдалана алды, содан кейін тек сол жолды а ішкі программа:

 СУБРУТИНДІК ПРИНТ V(VEC, LEN)   ШЫН VEC(*)   БАСЫП ШЫҒАРУ *, (VEC(Мен), Мен = 1, LEN) СОҢЫ БАҒДАРЛАМА НЕГІЗГІ   ПАРАМЕТР(LEN = 3)   ШЫН МАТРИКС(LEN, LEN)   ДЕРЕК МАТРИКС/1, 1, 1, 2, 4, 8, 3, 9, 27/   Қоңырауды басып шығару V(МАТРИКС(1, 2), LEN) СОҢЫ

Нәтижесі:

   2.000000       4.000000       8.000000

Жоқ екенін ескеріңіз допинг-вектор FORTRAN 66-да тілімнің ұзындығын аргумент ретінде немесе басқа тәсілмен - беру керек СУБРУТИН. 1970 жж Паскаль және C ұқсас шектеулер болды.

1968: Algol 68

Algol68 қорытынды есебінде тілімнің алғашқы мысалы келтірілген, тілімдер келесі түрде көрсетілген:

[төменгі шекара: жоғарғы шекара] Character кеңейтілген символдар жиынтығы бар компьютерлер үшін ¢

немесе:

(ТӨМЕН БАЙЛАНДЫРЫЛДЫ..ЖОҒАРЫ БАНДАЛДЫ) # БАРЛЫҒЫ 6 бит сипаттамалары бар компьютерлерге арналған. #

Екі шекара да қамтылған және алынып тасталуы мүмкін, бұл жағдайда олар жиымның жарияланған шекараларына сәйкес келеді. Қарапайым нысан да, диагональды кесінді бүркеншік аттары да қайта қаралған есептің құрамына кірмейді.

Мысалдар:

[3, 3] нақты a: = ((1, 1, 1), (2, 4, 8), (3, 9, 27)); # айнымалы матрицаның декларациясы #[,] нақты с = ((1, 1, 1), (2, 4, 8), (3, 9, 27)); # тұрақты матрица, өлшемі #
ref [] нақты жол: = a [2,]; # бүркеншік /реф қатар тіліміне #ref [] нақты col2 = a [, 2]; # тұрақты бүркеншік ат /реф # екінші бағанға
басып шығару ((а [:, 2], жаңа жол)); # екінші баған кесіндісі #басып шығару ((a [1⌈a,:], жаңа жол)); # соңғы жол #басып шығару ((a [:, 2⌈a], жаңа жол)); # соңғы баған тілімі #басып шығару ((a [: 2,: 2], жаңа жол)); # жетекші 2-ден 2-ге дейінгі «тілім» субматрикасы #
+1.000010+0 +4.000010+0 +9.000010+0+3.000010+0 +9.000010+0 +2.700010+1+1.000010+0 +8.000010+0 +2.700010+1+1.000010+0 +1.000010+0 +2.000010+0 +4.000010+0

1970 жылдар: MATLAB

> A = дөңгелек(ранд(3, 4, 5)*10) % 3x4x5 үш өлшемді немесе кубтық жиым> A(:, :, 3) % 3x4 бірінші және екінші өлшемдер бойынша екі өлшемді массиванс =  8  3  5  7  8  9  1  4  4  4  2  5> A(:, 2:3, 3) % 3x2 бірінші және екінші өлшемдер бойынша екі өлшемді массиванс =  3 5  9 1  4 2> A(2:Соңы, :, 3) % 2x4 'end' кілт сөзін қолданатын екі өлшемді массив; GNU Octave 3.2.4-пен жұмыс істейдіанс =   6    1    4    6  10    1    3    1> A(1, :, 3) % екінші өлшем бойынша бір өлшемді жиыманс =  8  3  5  7> A(1, 2, 3) % жалғыз мәнанс = 3

1976: S /R

Массивтер S және GNU R әрқашан бір негізді, сондықтан жаңа тілімнің индекстері басталады бір алдыңғы индекстерге қарамастан әрбір өлшем үшін. Ұзындығы бар өлшемдер бір алынып тасталады (егер түспесе = ЖАЛҒАН). Өлшем атаулары (егер бар болса) сақталады.

> A <- массив(1:60, күңгірт = в(3, 4, 5)) # 3x4x5 үшөлшемді немесе кубтық массив> A [, , 3] # 3x4 бірінші және екінші өлшемдер бойынша екі өлшемді массив     [, 1] [, 2] [, 3] [, 4][1,]   25   28   31   34[2,]   26   29   32   35[3,]   27   30   33   36> A [, 2:3, 3, түсіру = ЖАЛҒАН] # 3х2х1 текше массивтің ішкі жиыны (сақталған өлшемдер), , 1     [, 1] [, 2][1,]   28   31[2,]   29   32[3,]   30   33> A [, 2, 3]  # бірінші өлшем бойынша бір өлшемді жиым[1] 28 29 30> A [1, 2, 3] # жалғыз мән[1] 28

1977: Фортран 77

Fortran 77 стандарты кесу мүмкіндігін енгізді біріктіру жолдар:

БАҒДАРЛАМА НЕГІЗГІ  БАСЫП ШЫҒАРУ *, 'ABCDE'(2:4)СОҢЫ

Шығарады:

BCD

Мұндай жіптер өтіп кетуі мүмкін еді анықтама басқа ішкі бағдарламаға ұзындық ішкі түрге мөлдір түрде ішкі бағдарламаға беріледі қысқа допинг-вектор.

СУБРУТИНДІК ПРИНТ S(STR)  МІНДЕТ *(*)STR  БАСЫП ШЫҒАРУ *, STRСОҢЫБАҒДАРЛАМА НЕГІЗГІ  Қоңырауды басып шығару S('ABCDE'(2:4))СОҢЫ

Тағы шығарады:

BCD

1979: Sinclair_BASIC ZX80 / 81 / Спектр

ZX80 / 81 / Spectrum стандартты ROM-ы кесу және кесу мүмкіндігі бар BASIC ұсынады біріктіру жолдар:

(x TO y) командалық бөлігінде x және y мәндерін кесіп тастауға болады, бұл барлық тізбектелген массив ұяшықтарын (FROM x TO соңына дейін) немесе (TO TO y-ге дейін) пайдалану мағынасын береді. Көпөлшемді массивтермен тілімдеу тек соңғы деңгей өлшемімен мүмкін болады.

10ҚОЙЫҢЫЗ$=«ABCDE»(2дейін4)20БАСЫП ШЫҒАРУ$

Шығарады:

BCD
10ҚОЙЫҢЫЗ$=«ABCDE»20ҚОЙЫҢЫЗb $=$(4TO)+$(2TO3)+$(1)30БАСЫП ШЫҒАРУb $

Шығарады:

DEBCA

1983: Ада 83 және одан жоғары

Ada 83 барлық массив типтеріне арналған кесектерді қолдайды. Ұнайды Фортран 77 мұндай массивтер өтуі мүмкін анықтама басқа ішкі бағдарламаға ұзындық ішкі түрге мөлдір түрде ішкі бағдарламаға беріледі қысқа допинг-вектор.

бірге Мәтін_IO; рәсім Негізгі болып табылады   Мәтін : Жол := «ABCDE»;баста   Мәтін_IO.Put_Line (Мәтін (2 .. 4));Соңы Негізгі;

Шығарады:

BCD

Ескерту: Ада индекстері терминге негізделген Мәтін (2 .. 4) базалық индексі 2 болатын массивке әкеледі.

Үшін анықтама Мәтін_IO.Put_Line бұл:

пакет Ada.Text_IO болып табылады      рәсім Put_Line(Тармақ : жылы  Жол);

Үшін анықтама Жол бұл:

пакет Стандартты болып табылады   кіші түр Оң болып табылады Бүтін ауқымы 1 .. Бүтін'Соңғы;   түрі Жол болып табылады массив(Оң ауқымы <>) туралы Мінез;   прагма Қаптама(Жол);

Ада нағыз теріс индекстерді қолдайды History_Data_Array типі - History_Data массиві (-6000 .. 2010); ол жағымсыз индекстерге ерекше мән бермейді. Терминнің жоғарыдағы мысалында Кейбір_тарих_мәліметтері (-30 .. 30) кесетін еді Тарих_мәліметтер 31-ден Б.з.д. 30-ға дейін AD (нөлдік жыл болмағандықтан, 0 саны шын мәнінде 1-ге жатады Б.з.д. ).

1987: Перл

Егер бізде болса

@a = (2, 5, 7, 3, 8, 6, 4);

жоғарыдағыдай, алғашқы 3 элемент, ортаңғы 3 элемент және соңғы 3 элемент:

@a[0..2];   # (2, 5, 7)@a[2..4];   # (7, 3, 8)@a[-3..-1]; # (8, 6, 4)

Perl теріс тізім индекстерін қолдайды. -1 индексі соңғы элемент, -2 алдыңғы элемент және т.б., сонымен қатар, Perl өрнектерге негізделген кесуді қолдайды, мысалы:

@a[ 3.. $ # а ];   # 4 элемент соңына дейін (3, 8, 6, 4)@a[ греп { !($_ % 3) } (0...$ # а) ];    №1, 4 және 7 элемент (2,3,4)@a[ греп { !(($_+1) % 3) } (0..$ # а) ]; # әрбір үшінші элемент (7,6)

1991: Python

Егер сізде келесі тізім болса:

>>> сансыз = [1, 3, 5, 7, 8, 13, 20]

Содан кейін элементтерді іздеуге ұқсас белгіні қолдану арқылы кесуге болады:

>>> сансыз[3]   # кесуге болмайды7>>> сансыз[:3]  # 0 индексінен 3 индексіне дейін (қоса)[1, 3, 5]>>> сансыз[1:5][3, 5, 7, 8]>>> сансыз[-3:][8, 13, 20]

Python теріс индекстерге жол беретінін ескеріңіз. -1 индексі соңғы элементті, -2 алдыңғы элементті және т.с.с. білдіреді, сонымен қатар Python қосымша нүкте мен мән қосу арқылы қадам қасиетіне мүмкіндік береді. Мысалға:

>>> сансыз[3:][7, 8, 13, 20]>>> сансыз[3::] # == сандар [3:][7, 8, 13, 20]>>> сансыз[::3] # 0 индексінен бастап және әрбір үшінші элементті алу[1, 7, 20]>>> сансыз[1:5:2] # 1 индексінен 5 индексіне дейін және әрбір екінші элементті алу[3, 7]

Қадам синтаксисі (сандар [1: 5: 2]) 1990-шы жылдардың екінші жартысында, Python «матрицасы-SIG» (ерекше қызығушылық тобы) ғылыми қолданушыларының сұраныстары нәтижесінде енгізілді.[2]

Тілік семантикасы әр объект үшін әр түрлі болуы мүмкін; жаңа семантиканы қашан енгізуге болады оператордың шамадан тыс жүктелуі индекстеу операторы. Python стандартты тізімдерімен (олар бар динамикалық массивтер ), әрбір тілім - бұл көшірме. Тілімдері NumPy массивтер, керісінше, сол негізгі буферге қарайды.

1992: Фортран 90 және одан жоғары

Fortran 90-да кесінділер пішінде көрсетілген

төменгі_байланысты:жоғарғы_байланысты[:қадам]

Екі шекара да қамтылған және алынып тасталуы мүмкін, бұл жағдайда олар декларацияланған шектерге дефолт болады. Әдепкі бойынша 1-қадам. Мысалы:

нақты, өлшем(м, n):: а  ! матрица декларациясы  басып шығару *, а(:, 2) ! екінші бағанбасып шығару *, а(м, :) ! соңғы қатарбасып шығару *, а(:10, :10) ! жетекші 10-дан 10-ға дейінгі субматрица

1994: Analytica

Массивтің әрбір өлшемі Analytica индексінің айнымалысымен анықталады. Бөлшектеу немесе жазылу кезінде синтаксис сіз кесетін немесе жазылатын өлшемді өлшемдерді атау арқылы анықтайды. Сияқты:

I индексі: = 1..5 {Сандық индекстің анықтамасы} J индексі: = ['A', 'B', 'C'] {Мәтінмен бағаланатын индекстің анықтамасы} айнымалы X: = массив (I, J , [[10, 20, 30], [1, 2, 3], ....]) {2D мәнінің анықтамасы} X [I = 1, J = 'B'] -> 20 {алу жалғыз мән} X [I = 1] -> Массив (J, [10, 20, 30]) {1D массивін кесіңіз. } X [J = 2] -> Массив (I, [20, 2, ....]) {1D массивін басқа өлшемге бөліңіз. } X [I = 1..3] {Алғашқы төрт элементті I-ден артық барлық элементтерді J-ден бөліп алыңыз}

Бөлшектеу мен жазылуда индекстерді атау функциялардың шақыруларындағы параметрлердің тұрақты тізбегіне сүйенудің орнына оларды атауға ұқсас. Бөлшектеу кезінде индекстерді атаудың бір артықшылығы - программист көп өлшемді массивтегі Индекстер ретін есте сақтамауы керек. Терең артықшылығы - өрнектер автоматты түрде және қауіпсіз түрде X өлшемдерінің саны өзгерген кезде қайта жазуды қажет етпестен қорытады.

1998: S-Lang

Массивті кесу 1.0 нұсқасында енгізілген. Алдыңғы нұсқалар бұл мүмкіндікті қолдамады.

A сияқты 1-d массиві болсын делік

    A = [1:50]; % A = [1, 2, 3, ... 49, 50]

Содан кейін А-ның алғашқы 5 элементінен тұратын В массивін жасауға болады

    B = A [[: 4]];

Сол сияқты, B-ді А-ның соңғы 5 элементінің жиымына тағайындауға болады:

    B = A [[- 5:]];

1-өлшемді кесудің басқа мысалдары:

    A [-1]% AA соңғы элементі [*]% AA барлық элементтері [[:: 2]]% AA барлық жұп элементтер [[1 :: 2]]% AA барлық тақ элементтері [[- 1 :: - 2]]% кері тәртіптегі барлық жұп элементтер [[[[0: 3], [10:14]]]% элементтер 0-3 және 10-14

Жоғары өлшемді массивтерді кесу келесідей жұмыс істейді:

    A [-1, *]% AA соңғы қатары [[1: 5], [2: 7]]% 2d жиым, 1-5 жолдар мен 2-7 бағандарды A [[5: 1: -1], [2: 7]]% Жолдардан басқа, жоғарыдағы сияқты

Массив индекстері бүтін сандардың жиымдары бола алады. Мысалы, шам I = [0: 9] бұл 10 бүтін саннан тұратын жиым. Содан кейінA [I] алғашқы 10 элементтің жиымына тең A. Бұған практикалық мысал ретінде сұрыптау операциясын келтіруге болады:

    I = array_sort (A); % B = A [I] сұрыптау индекстерінің тізімін алыңыз; % B - A C = A сұрыпталған нұсқасы [array_sort (A)]; % Жоғарыда айтылғандармен бірдей, бірақ қысқа.

1999: Д.

Массивті қарастырайық:

int[] а = [2, 5, 7, 3, 8, 6, 4, 1];

Оның бір бөлігін алыңыз:

int[] б = а[2 .. 5];

және мазмұны б болады [7, 3, 8]. Тілімнің бірінші индексі инклюзивті, екіншісі эксклюзивті.

автоматты в = а[$ - 4 .. $ - 2];

динамикалық жиым дегенді білдіреді в енді бар [8, 6] өйткені [] ішіндегі $ символ массивтің ұзындығына қатысты.

D жиымының тілімдері бастапқы жиымға сәйкес келеді, сондықтан:

б[2] = 10;

дегенді білдіреді а енді мазмұны бар [2, 5, 7, 3, 10, 6, 4, 1]. Массив деректерінің көшірмесін жасау үшін тек бүркеншік аттың орнына келесі әрекеттерді орындаңыз:

автоматты б = а[2 .. 5].дуп;

Python-тан айырмашылығы, D кесінді шекаралары қанықпайды, сондықтан Python кодына баламалы код D-дегі қате болып табылады:

>>> г. = [10, 20, 30]>>> г.[1 : 5][20, 30]

2004: SuperCollider

Бағдарламалау тілі SuperCollider бастап кейбір ұғымдарды жүзеге асырады Дж /APL. Кесінділер келесідей көрінеді:

а = [3, 1, 5, 7]           // а айнымалысына массив тағайындауа[0..1]                    // а-ның алғашқы екі элементін қайтаруа[..1]                     // а-ның алғашқы екі элементін қайтарыңыз: нөлді жіберіп алуға боладыа[2..]                     // 3 элементін соңғысына дейін қайтарыңыза[[0, 3]]                  // а-ның бірінші және төртінші элементін қайтаруа[[0, 3]] = [100, 200]     // а-ның бірінші және төртінші элементін ауыстыруа[2..] = [100, 200]        // а-ның соңғы екі элементін ауыстырыңыз// а айнымалысына көпөлшемді массив тағайындауа = [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19]]; а.тілім(2, 3);             // 2 және 3 координаталары бар кесінді алыңыз (қайтарымы 13)а.тілім(нөл, 3);           // ортогональды кесінді алыңыз (қайтарады [3, 8, 13, 18])

2005: балық

Массивтер балық әрқашан бір негізді, сондықтан жаңа тілімнің индекстері басталады бір, алдыңғы индекстерге қарамастан.

> орнатылды A (сек 3 2 11)       # $ A - мәні 3, 5, 7, 9, 11 болатын жиым > жаңғырық $ A[(2-кезең)]         # $ A алғашқы екі элементін басып шығарыңыз 3 5 > орнатылды B $ A[1 2]            # $ B құрамында $ A бірінші және екінші элементі бар, яғни 3, 5 > орнатылды -е А.[$ B]; жаңғырық $ A    # $ A үшінші және бесінші элементтерін өшіріп, $ A басып шығарыңыз3 5 9

2006: Кобра

Cobra Python стиліндегі тілімдерді қолдайды. Егер сізде тізім болса

сансыз = [1, 3, 5, 7, 8, 13, 20]

, содан кейін алғашқы 3 элемент, ортаңғы 3 элемент және соңғы 3 элемент:

сансыз[:3]   # тең [1, 3, 5]сансыз[2:5]  # тең [5, 7, 8]сансыз[-3:]  # тең [8, 13, 20]

Cobra сонымен қатар 'цикл үшін сандық' тілім стиліндегі синтаксисті қолдайды:

үшін мен жылы 2 : 5    басып шығару мен# 2, 3, 4 басып шығарадыүшін j жылы 3    басып шығару j# 0, 1, 2 басып шығарады

2006: Windows PowerShell

Массивтер PowerShell-де нөлге негізделген және оларды үтір операторының көмегімен анықтауға болады:

PS>$ a = 2, 5, 7, 3, 8, 6, 4, 1PS># $ A-ның алғашқы екі элементін басып шығарыңыз:PS>"$($ a[0, 1])"2 5PS># Диапазондық оператордың көмегімен тілімді алыңыз:PS>"$($ a[2..5])"7 3 8 6PS># Соңғы 3 элементті алыңыз:PS>"$($ a[-3..-1])"6 4 1PS># Массивтің мазмұнын кері тәртіпте қайтарыңыз:PS>"$($ a[($ a.Ұзындық - 1)..0])" # Ұзындық - бұл System.Object қасиеті []1 4 6 8 3 7 5 2

2009: Барыңыз

Go тілімдеу үшін Python стиліндегі синтаксисті қолдайды (теріс индекстерді қоспағанда). Массивтер мен тілімдерді кесуге болады. Егер сізде бір тілім болса

сансыз := []int{1, 3, 5, 7, 8, 13, 20}

сонда алғашқы 3 элемент, ортаңғы 3 элемент, соңғы 3 элемент және барлық тілімнің көшірмесі:

сансыз[:3]  // тең [] int {1, 3, 5}сансыз[2:5] // тең [] int {5, 7, 8}сансыз[4:]  // тең [] int {8, 13, 20}сансыз[:]   // тең [] int {1, 3, 5, 7, 8, 13, 20}

Go-дегі кесінділер сілтеме типтері болып табылады, яғни әр түрлі кесінділер бір негізгі массивке сілтеме жасай алады.

2010: Cilk Plus

Cilk Plus C және C ++ кеңейтімі ретінде массивтерді кесуге арналған синтаксисті қолдайды.

жиым_ негізі [төменгі_байланысты:ұзындығы[:қадам]]*

Cilk Plus кесіндісі келесідей көрінеді:

A[:]     // А векторының барлығыB[2:6]   // В векторының 2-ден 7-ге дейінгі элементтеріC[:][5]  // С матрицасының 5-бағанасыД.[0:3:2] // D векторының 0, 2, 4 элементтері

Cilk Plus массивін кесу Fortran-дан екі ерекшеленеді:

  • екінші параметр - стандартты С кітапханаларына сәйкес болу үшін жоғарғы шекараның орнына ұзындық (тілімдегі элементтер саны);
  • кесу ешқашан уақытша болмайды, сондықтан жадты бөлудің қажеті жоқ. Тапсырмалар бір-бірімен сәйкес келмеуі немесе мүлдем қайталануы қажет, әйтпесе нәтиже анықталмайды.

2012: Джулия

Джулия массивтерін кесу Matlab сияқты, бірақ тік жақшаларды қолданады. Мысал:

Джулия> х = ранд(4, 3)4х3 массив {Float64,2}: 0.323877  0.186253  0.600605 0.404664  0.894781  0.0955007 0.223562  0.18859   0.120011 0.149316  0.779823  0.0690126Джулия> х[:, 2]                # екінші бағанды ​​алыңыз.4 элементті массив {Float64,1}: 0.186253 0.894781 0.18859 0.779823Джулия> х[1, :]                # бірінші қатарды алыңыз.1x3 массив {Float64,2}: 0.323877  0.186253  0.600605Джулия> х[1:2,2:3]             # 1,2 жолдар мен 2,3 бағандарды қамтитын субматрицаны алыңыз2х2 массив {Float64,2}: 0.186253  0.600605 0.894781  0.0955007

Сондай-ақ қараңыз

Әдебиеттер тізімі

  1. ^ Чжан, Земин; Аэрон, uchучин (2017-03-15). «T-SVD көмегімен нақты тензорды аяқтау». IEEE сигналдарды өңдеу бойынша транзакциялар. Электр және электроника инженерлері институты (IEEE). 65 (6): 1511–1526. дои:10.1109 / tsp.2016.2639466. ISSN  1053-587X.
  2. ^ Миллман, К.Джаррод; Айвазис, Майкл (2011). «Ғалымдар мен инженерлерге арналған Python». Ғылым мен техникадағы есептеу. 13 (2): 9–12.