HOME

TheInfoList



OR:

In
computer programming Computer programming is the process of performing a particular computation (or more generally, accomplishing a specific computing result), usually by designing and building an executable computer program. Programming involves tasks such as anal ...
, array slicing is an operation that extracts a subset of elements from an
array An array is a systematic arrangement of similar objects, usually in rows and columns. Things called an array include: {{TOC right Music * In twelve-tone and serial composition, the presentation of simultaneous twelve-tone sets such that the ...
and packages them as another array, possibly in a different
dimension In physics and mathematics, the dimension of a mathematical space (or object) is informally defined as the minimum number of coordinates needed to specify any point within it. Thus, a line has a dimension of one (1D) because only one coord ...
from the original. Common examples of array slicing are extracting a substring from a string of characters, the "''ell''" in "h''ell''o", extracting a row or column from a two-dimensional array, or extracting a
vector Vector most often refers to: *Euclidean vector, a quantity with a magnitude and a direction *Vector (epidemiology), an agent that carries and transmits an infectious pathogen into another living organism Vector may also refer to: Mathematic ...
from a
matrix Matrix most commonly refers to: * ''The Matrix'' (franchise), an American media franchise ** '' The Matrix'', a 1999 science-fiction action film ** "The Matrix", a fictional setting, a virtual reality environment, within ''The Matrix'' (franchi ...
. Depending on the
programming language A programming language is a system of notation for writing computer programs. Most programming languages are text-based formal languages, but they may also be graphical. They are a kind of computer language. The description of a programming ...
, an array slice can be made out of non-consecutive elements. Also depending on the language, the elements of the new array may be aliased to (i.e., share memory with) those of the original array.


Details

For "one-dimensional" (single-indexed) arrays vectors, sequence, strings etc. the most common slicing operation is extraction of zero or more consecutive elements. Thus, if we have a vector containing elements (2, 5, 7, 3, 8, 6, 4, 1), and we want to create an array slice from the 3rd to the 6th items, we get (7, 3, 8, 6). In
programming language A programming language is a system of notation for writing computer programs. Most programming languages are text-based formal languages, but they may also be graphical. They are a kind of computer language. The description of a programming ...
s that use a 0-based indexing scheme, the slice would be from index ''2'' to ''5''. Reducing the range of any index to a single value effectively eliminates that index. This feature can be used, for example, to extract one-dimensional slices (vectors: in 3D, rows, columns, and tubes) or two-dimensional slices (rectangular matrices) from a three-dimensional array. However, since the range can be specified at run-time, type-checked languages may require an explicit (compile-time) notation to actually eliminate the trivial indices. General array slicing can be implemented (whether or not built into the language) by referencing every array through a dope vector or ''descriptor'' a record that contains the address of the first array element, and then the range of each index and the corresponding coefficient in the indexing formula. This technique also allows immediate array transposition, index reversal, subsampling, etc. For languages like C, where the indices always start at zero, the dope vector of an array with ''d'' indices has at least 1 + 2''d'' parameters. For languages that allow arbitrary lower bounds for indices, like
Pascal Pascal, Pascal's or PASCAL may refer to: People and fictional characters * Pascal (given name), including a list of people with the name * Pascal (surname), including a list of people and fictional characters with the name ** Blaise Pascal, Frenc ...
, the dope vector needs 1 + 3''d'' entries. If the array abstraction does not support true negative indices (as for example the arrays of
Ada Ada may refer to: Places Africa * Ada Foah, a town in Ghana * Ada (Ghana parliament constituency) * Ada, Osun, a town in Nigeria Asia * Ada, Urmia, a village in West Azerbaijan Province, Iran * Ada, Karaman, a village in Karaman Province, T ...
and
Pascal Pascal, Pascal's or PASCAL may refer to: People and fictional characters * Pascal (given name), including a list of people with the name * Pascal (surname), including a list of people and fictional characters with the name ** Blaise Pascal, Frenc ...
do), then negative indices for the bounds of the slice for a given dimension are sometimes used to specify an offset from the end of the array in that dimension. In 1-based schemes, -1 generally would indicate the second-to-last item, while in a 0-based system, it would mean the very last item.


History

The concept of slicing was surely known even before the invention of
compiler In computing, a compiler is a computer program that translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primarily used for programs tha ...
s. Slicing as a language feature probably started with FORTRAN (1957), more as a consequence of non-existent type and range checking than by design. The concept was also alluded to in the preliminary report for the
IAL Ial or Yale ( cy, Iâl) was a commote of medieval Wales within the cantref of Maelor in the Kingdom of Powys. When the Kingdom was divided in 1160, Maelor became part of the Princely realm of Powys Fadog (Lower Powys or Madog's Powys), and belo ...
(ALGOL 58) in that the syntax allowed one or more indices of an array element (or, for that matter, of a procedure call) to be omitted when used as an actual parameter. Kenneth Iverson's APL (1957) had very flexible multi-dimensional array slicing, which contributed much to the language's expressive power and popularity.
ALGOL 68 ALGOL 68 (short for ''Algorithmic Language 1968'') is an imperative programming language that was conceived as a successor to the ALGOL 60 programming language, designed with the goal of a much wider scope of application and more rigorously d ...
(1968) introduced comprehensive multi-dimension array slicing and trimming features. Array slicing facilities have been incorporated in several modern languages, such as Ada 2005, Cobra, D, Fortran 90, Go,
Rust Rust is an iron oxide, a usually reddish-brown oxide formed by the reaction of iron and oxygen in the catalytic presence of water or air moisture. Rust consists of hydrous iron(III) oxides (Fe2O3·nH2O) and iron(III) oxide-hydroxide (FeO( ...
,
Julia Julia is usually a feminine given name. It is a Latinate feminine form of the name Julio and Julius. (For further details on etymology, see the Wiktionary entry "Julius".) The given name ''Julia'' had been in use throughout Late Antiquity (e.g ...
,
MATLAB MATLAB (an abbreviation of "MATrix LABoratory") is a proprietary multi-paradigm programming language and numeric computing environment developed by MathWorks. MATLAB allows matrix manipulations, plotting of functions and data, implementat ...
,
Perl Perl is a family of two high-level, general-purpose, interpreted, dynamic programming languages. "Perl" refers to Perl 5, but from 2000 to 2019 it also referred to its redesigned "sister language", Perl 6, before the latter's name was offic ...
, Python,
S-Lang The S-Lang programming library is a software library for Unix, Windows, VMS, OS/2, and Mac OS X. It provides routines for embedding an interpreter for the S-Lang scripting language, and components to facilitate the creation of text-based appl ...
,
Windows PowerShell PowerShell is a task automation and configuration management program from Microsoft, consisting of a command-line shell and the associated scripting language. Initially a Windows component only, known as Windows PowerShell, it was made open-so ...
and the mathematical/statistical languages
GNU Octave GNU Octave is a high-level programming language primarily intended for scientific computing and numerical computation. Octave helps in solving linear and nonlinear problems numerically, and for performing other numerical experiments using a lan ...
, S and R.


Timeline of slicing in various programming languages


1966: Fortran 66

The Fortran 66 programmers were only able to take advantage of slicing matrices by row, and then only when passing that row to a
subroutine In computer programming, a function or subroutine is a sequence of program instructions that performs a specific task, packaged as a unit. This unit can then be used in programs wherever that particular task should be performed. Functions may ...
: SUBROUTINE PRINT V(VEC, LEN) REAL VEC(*) PRINT *, (VEC(I), I = 1, LEN) END PROGRAM MAIN PARAMETER(LEN = 3) REAL MATRIX(LEN, LEN) DATA MATRIX/1, 1, 1, 2, 4, 8, 3, 9, 27/ CALL PRINT V(MATRIX(1, 2), LEN) END Result:
   2.000000       4.000000       8.000000
Note that there is no dope vector in FORTRAN 66 hence the length of the slice must also be passed as an argument - or some other means - to the SUBROUTINE. 1970s
Pascal Pascal, Pascal's or PASCAL may refer to: People and fictional characters * Pascal (given name), including a list of people with the name * Pascal (surname), including a list of people and fictional characters with the name ** Blaise Pascal, Frenc ...
and C had similar restrictions.


1968:

Algol 68 ALGOL 68 (short for ''Algorithmic Language 1968'') is an imperative programming language that was conceived as a successor to the ALGOL 60 programming language, designed with the goal of a much wider scope of application and more rigorously d ...

Algol68 final report contains an early example of slicing, slices are specified in the form: ower bound:upper bound''¢ for computers with extended character sets ¢'' or: (LOWER BOUND..UPPER BOUND) ''# FOR COMPUTERS WITH ONLY 6 BIT CHARACTERS. #'' Both bounds are inclusive and can be omitted, in which case they default to the declared array bounds. Neither the stride facility, nor diagonal slice aliases are part of the revised report. Examples: , 3eal a := ((1, 1, 1), (2, 4, 8), (3, 9, 27)); ''# declaration of a variable matrix #'' real c = ((1, 1, 1), (2, 4, 8), (3, 9, 27)); ''# constant matrix, the size is implied #'' ref[]real row := a[2,]; ''# alias/ref to a row slice #'' ref[]real col2 = a[, 2]; ''# permanent alias/ref to second column #'' print ((a[:, 2], newline)); ''# second column slice #'' print ((a ⌈a, : newline)); ''# last row slice #'' print ((a , 2⌈a newline)); ''# last column slice #'' print ((a 2, :2 newline)); ''# leading 2-by-2 submatrix "slice" #'' +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


1970s:

MATLAB MATLAB (an abbreviation of "MATrix LABoratory") is a proprietary multi-paradigm programming language and numeric computing environment developed by MathWorks. MATLAB allows matrix manipulations, plotting of functions and data, implementat ...

> A = round(rand(3, 4, 5)*10) % 3x4x5 three-dimensional or cubic array > A(:, :, 3) % 3x4 two-dimensional array along first and second dimensions ans = 8 3 5 7 8 9 1 4 4 4 2 5 > A(:, 2:3, 3) % 3x2 two-dimensional array along first and second dimensions ans = 3 5 9 1 4 2 > A(2:end, :, 3) % 2x4 two-dimensional array using the 'end' keyword; works with GNU Octave 3.2.4 ans = 6 1 4 6 10 1 3 1 > A(1, :, 3) % single-dimension array along second dimension ans = 8 3 5 7 > A(1, 2, 3) % single value ans = 3


1976: S/ R

Arrays in S and
GNU R R is a programming language for statistical computing and graphics supported by the R Core Team and the R Foundation for Statistical Computing. Created by statisticians Ross Ihaka and Robert Gentleman, R is used among data miners, bioinforma ...
are always one-based, thus the indices of a new slice will begin with ''one'' for each dimension, regardless of the previous indices. Dimensions with length of ''one'' will be dropped (unless drop = FALSE). Dimension names (where present) will be preserved. > A <- array(1:60, dim = c(3, 4, 5)) # 3x4x5 three-dimensional or cubic array > A , 3# 3x4 two-dimensional array along first and second dimensions 1 2 3 4 , 25 28 31 34 , 26 29 32 35 , 27 30 33 36 > A 2:3, 3, drop = FALSE# 3x2x1 cubic array subset (preserved dimensions) , , 1 1 2 , 28 31 , 29 32 , 30 33 > A 2, 3 # single-dimension array along first dimension 28 29 30 > A , 2, 3# single value 28


1977: Fortran 77

The Fortran 77 standard introduced the ability to slice and
concatenate In formal language theory and computer programming, string concatenation is the operation of joining character strings end-to-end. For example, the concatenation of "snow" and "ball" is "snowball". In certain formalisations of concatenat ...
strings: PROGRAM MAIN PRINT *, 'ABCDE'(2:4) END Produces: BCD Such strings could be passed by reference to another subroutine, the length would also be passed transparently to the subroutine as a kind of short dope vector. SUBROUTINE PRINT S(STR) CHARACTER *(*)STR PRINT *, STR END PROGRAM MAIN CALL PRINT S('ABCDE'(2:4)) END Again produces: BCD


1979:

Sinclair BASIC Sinclair BASIC is a dialect of the programming language BASIC used in the 8-bit home computers from Sinclair Research and Timex Sinclair. The Sinclair BASIC interpreter was made by Nine Tiles Networks Ltd. History Sinclair BASIC was o ...
ZX80/81/Spectrum

The standard ROM of the ZX80/81/Spectrum offers BASIC with the ability to slice and
concatenate In formal language theory and computer programming, string concatenation is the operation of joining character strings end-to-end. For example, the concatenation of "snow" and "ball" is "snowball". In certain formalisations of concatenat ...
strings: in the command part (x TO y) which points out the needed array slice the x and y value can be omitted giving the meaning to use all chained array cells (FROM x TO end ) or (begin TO y). With multidimensional arrays, the slicing is only possible with the last level dimension. 10 LET a$="ABCDE"(2 to 4) 20 PRINT a$ Produces: BCD 10 LET a$="ABCDE" 20 LET b$=a$(4 TO)+a$(2 TO 3)+a$(1) 30 PRINT b$ Produces: DEBCA


1983:

Ada 83 Ada is a structured, statically typed, imperative, and object-oriented high-level programming language, extended from Pascal and other languages. It has built-in language support for '' design by contract'' (DbC), extremely strong typing, e ...
and above

Ada 83 supports slices for all array types. Like Fortran 77 such arrays could be passed by reference to another subroutine, the length would also be passed transparently to the subroutine as a kind of short dope vector. with Text_IO; procedure Main is Text : String := "ABCDE"; begin Text_IO.Put_Line (Text (2 .. 4)); end Main; Produces: BCD Note: Since in Ada indices are n-based the term Text (2 .. 4) will result in an Array with the base index of 2. The definition for Text_IO.Put_Line is: package Ada.Text_IO is procedure Put_Line(Item : in String); The definition for String is: package Standard is subtype Positive is Integer range 1 .. Integer'Last; type String is array(Positive range <>) of Character; pragma Pack(String); As Ada supports true negative indices as in type History_Data_Array is array (-6000 .. 2010) of History_Data; it places no special meaning on negative indices. In the example above the term Some_History_Data (-30 .. 30) would slice the History_Data from 31 BC to 30 AD (since there was no year zero, the year number 0 actually refers to 1 BC).


1987:

Perl Perl is a family of two high-level, general-purpose, interpreted, dynamic programming languages. "Perl" refers to Perl 5, but from 2000 to 2019 it also referred to its redesigned "sister language", Perl 6, before the latter's name was offic ...

If we have @a = (2, 5, 7, 3, 8, 6, 4); as above, then the first 3 elements, middle 3 elements and last 3 elements would be: @a ..2 # (2, 5, 7) @a ..4 # (7, 3, 8) @a 3..-1 # (8, 6, 4) Perl supports negative list indices. The -1 index is the last element, -2 the penultimate element, etc. In addition, Perl supports slicing based on expressions, for example: @a 3.. $#a # 4th element until the end (3, 8, 6, 4) @a grep (0...$#a) # 1st, 4th and 7th element (2,3,4) @a grep (0..$#a) # every 3rd element (7,6)


1991: Python

If you have the following list: >>> nums = , 3, 5, 7, 8, 13, 20 Then it is possible to slice by using a notation similar to element retrieval: >>> nums # no slicing 7 >>> nums 3 # from index 0 (inclusive) until index 3 (exclusive)
, 3, 5 The comma is a punctuation mark that appears in several variants in different languages. It has the same shape as an apostrophe or single closing quotation mark () in many typefaces, but it differs from them in being placed on the baseline o ...
>>> nums :5 , 5, 7, 8>>> nums 3: , 13, 20
Note that Python allows negative list indices. The index -1 represents the last element, -2 the penultimate element, etc. Python also allows a step property by appending an extra colon and a value. For example: >>> nums : , 8, 13, 20>>> nums ::#

nums : , 8, 13, 20>>> nums :3# starting at index 0 and getting every third element , 7, 20>>> nums :5:2# from index 1 until index 5 and getting every second element , 7
The stride syntax (nums :5:2/code>) was introduced in the second half of the 1990s, as a result of requests put forward by scientific users in the Python "matrix-SIG" (special interest group). Slice semantics potentially differ per object; new semantics can be introduced when
operator overloading In computer programming, operator overloading, sometimes termed ''operator ad hoc polymorphism'', is a specific case of polymorphism, where different operators have different implementations depending on their arguments. Operator overloading i ...
the indexing operator. With Python standard lists (which are
dynamic array In computer science, a dynamic array, growable array, resizable array, dynamic table, mutable array, or array list is a random access, variable-size list data structure that allows elements to be added or removed. It is supplied with standard li ...
s), every slice is a copy. Slices of NumPy arrays, by contrast, are views onto the same underlying buffer.


1992: Fortran 90 and above

In Fortran 90, slices are specified in the form lower_bound:upper_bound stride Both bounds are inclusive and can be omitted, in which case they default to the declared array bounds. Stride defaults to 1. Example: real, dimension(m, n):: a ! declaration of a matrix print *, a(:, 2) ! second column print *, a(m, :) ! last row print *, a(:10, :10) ! leading 10-by-10 submatrix


1994: Analytica

Each dimension of an array value in Analytica is identified by an Index variable. When slicing or subscripting, the syntax identifies the dimension(s) over which you are slicing or subscripting by naming the dimension. Such as:
Index I := 1..5   
Index J :=  A', 'B', 'C'
Variable X := Array(I, J,  10, 20, 30  , 2, 3 ....]) 
X  = 1, J = 'B' -> 20  
X  = 1->  Array(J,  0, 20, 30  
X  = 2-> Array(I,  0, 2, .... 
X  = 1..3 
Naming indexes in slicing and subscripting is similar to naming parameters in function calls instead of relying on a fixed sequence of parameters. One advantage of naming indexes in slicing is that the programmer does not have to remember the sequence of Indexes, in a multidimensional array. A deeper advantage is that expressions generalize automatically and safely without requiring a rewrite when the number of dimensions of X changes.


1998:

S-Lang The S-Lang programming library is a software library for Unix, Windows, VMS, OS/2, and Mac OS X. It provides routines for embedding an interpreter for the S-Lang scripting language, and components to facilitate the creation of text-based appl ...

Array slicing was introduced in version 1.0. Earlier versions did not support this feature. Suppose that A is a 1-d array such as
    A =  :50           % A =  , 2, 3, ...49, 50
Then an array B of first 5 elements of A may be created using
    B = A :4;
Similarly, B may be assigned to an array of the last 5 elements of A via:
    B = A -5:;
Other examples of 1-d slicing include:
    A 1                % The last element of A
    A                  % All elements of A
    A ::2              % All even elements of A
    A 1::2             % All odd elements of A
    A -1::-2           % All even elements in the reversed order
    A [0:3_[10:14.html"_;"title=":3.html"_;"title="[0:3">[0:3_[10:14">:3.html"_;"title="[0:3">[0:3_[10:14.html" ;"title=":3">[0:3_[10:14.html" ;"title=":3.html" ;"title="[0:3">[0:3 [10:14">:3.html" ;"title="[0:3">[0:3 [10:14">:3">[0:3_[10:14.html" ;"title=":3.html" ;"title="[0:3">[0:3 [10:14">:3.html" ;"title="[0:3">[0:3 [10:14  % Elements 0-3 and 10-14
Slicing of higher-dimensional arrays works similarly:
    A[-1, *]              % The last row of A
    A1:5], [2:7       % 2d array using rows 1-5 and columns 2-7
    A5:1:-1], [2:7    % Same as above except the rows are reversed
Array indices can also be arrays of integers. For example, suppose that I = :9/code> is an array of 10 integers. Then A /code> is equivalent to an array of the first 10 elements of A. A practical example of this is a sorting operation such as:
    I = array_sort(A);    % Obtain a list of sort indices
    B = A              % B is the sorted version of A
    C = A rray_sort(A) % Same as above but more concise.


1999: D

Consider the array: int[] a = [2, 5, 7, 3, 8, 6, 4, 1]; Take a slice out of it: int[] b = a[2 .. 5]; and the contents of b will be [7, 3, 8]. The first index of the slice is inclusive, the second is exclusive. auto c = a - 4 .. $ - 2 means that the dynamic array c now contains , 6/code> because inside the [] the $ symbol refers to the length of the array. D array slices are aliased to the original array, so: b[2] = 10; means that a now has the contents , 5, 7, 3, 10, 6, 4, 1/code>. To create a copy of the array data, instead of only an alias, do: auto b = a .. 5dup; Unlike Python, D slice bounds don't saturate, so code equivalent to this Python code is an error in D: >>> d = 0, 20, 30>>> d : 5 0, 30


2004:

SuperCollider A particle accelerator is a machine that uses electromagnetic fields to propel charged particles to very high speeds and energies, and to contain them in well-defined beams. Large accelerators are used for fundamental research in particl ...

The programming language
SuperCollider A particle accelerator is a machine that uses electromagnetic fields to propel charged particles to very high speeds and energies, and to contain them in well-defined beams. Large accelerators are used for fundamental research in particl ...
implements some concepts from J/ APL. Slicing looks as follows: a = , 1, 5, 7 // assign an array to the variable a a ..1 // return the first two elements of a a .1 // return the first two elements of a: the zero can be omitted a .. // return the element 3 till last one a 0, 3 // return the first and the fourth element of a a 0, 3 = 00, 200 // replace the first and the fourth element of a a ..= 00, 200 // replace the two last elements of a // assign a multidimensional array to the variable a a = 0, 1, 2, 3, 4 , 6, 7, 8, 9
0, 11, 12, 13, 14 The comma is a punctuation mark that appears in several variants in different languages. It has the same shape as an apostrophe or single closing quotation mark () in many typefaces, but it differs from them in being placed on the baseline o ...
5, 16, 17, 18, 19; a.slice(2, 3); // take a slice with coordinates 2 and 3 (returns 13) a.slice(nil, 3); // take an orthogonal slice (returns , 8, 13, 18


2005:

fish Fish are Aquatic animal, aquatic, craniate, gill-bearing animals that lack Limb (anatomy), limbs with Digit (anatomy), digits. Included in this definition are the living hagfish, lampreys, and Chondrichthyes, cartilaginous and bony fish as we ...

Arrays in
fish Fish are Aquatic animal, aquatic, craniate, gill-bearing animals that lack Limb (anatomy), limbs with Digit (anatomy), digits. Included in this definition are the living hagfish, lampreys, and Chondrichthyes, cartilaginous and bony fish as we ...
are always one-based, thus the indices of a new slice will begin with ''one'', regardless of the previous indices. > set A (seq 3 2 11) # $A is an array with the values 3, 5, 7, 9, 11 > echo $A seq 2) # Print the first two elements of $A 3 5 > set B $A 2 # $B contains the first and second element of $A, i.e. 3, 5 > set -e A B echo $A # Erase the third and fifth elements of $A, print $A 3 5 9


2006: Cobra

Cobra supports Python-style slicing. If you have a list nums = , 3, 5, 7, 8, 13, 20 then the first 3 elements, middle 3 elements, and last 3 elements would be: nums 3 # equals
, 3, 5 The comma is a punctuation mark that appears in several variants in different languages. It has the same shape as an apostrophe or single closing quotation mark () in many typefaces, but it differs from them in being placed on the baseline o ...
nums :5 # equals , 7, 8nums 3: # equals , 13, 20
Cobra also supports slicing-style syntax for 'numeric for loops': for i in 2 : 5 print i # prints 2, 3, 4 for j in 3 print j # prints 0, 1, 2


2006:

Windows PowerShell PowerShell is a task automation and configuration management program from Microsoft, consisting of a command-line shell and the associated scripting language. Initially a Windows component only, known as Windows PowerShell, it was made open-so ...

Arrays are zero-based in PowerShell and can be defined using the comma operator: PS > $a = 2, 5, 7, 3, 8, 6, 4, 1 PS > # Print the first two elements of $a: PS > "$($a
, 1 The comma is a punctuation mark that appears in several variants in different languages. It has the same shape as an apostrophe or single closing quotation mark () in many typefaces, but it differs from them in being placed on the baseline o ...
" 2 5 PS > # Take a slice out of it using the range operator: PS > "$($a ..5" 7 3 8 6 PS > # Get the last 3 elements: PS > "$($a 3..-1" 6 4 1 PS > # Return the content of the array in reverse order: PS > "$($a $a.Length - 1)..0" # Length is a property of System.Object[] 1 4 6 8 3 7 5 2


2009: Go

Go supports Python-style syntax for slicing (except negative indices are not supported). Arrays and slices can be sliced. If you have a slice nums := []int then the first 3 elements, middle 3 elements, last 3 elements, and a copy of the entire slice would be: nums 3 // equals []int nums :5// equals []int nums[4:] // equals []int nums[:] // equals []int Slices in Go are reference types, which means that different slices may refer to the same underlying array.


2010:

Cilk Plus Cilk, Cilk++, Cilk Plus and OpenCilk are general-purpose programming languages designed for multithreaded parallel computing. They are based on the C and C++ programming languages, which they extend with constructs to express parallel loo ...

Cilk Plus supports syntax for array slicing as an extension to C and C++. array_base ower_bound:length[:stride* Cilk_Plus_slicing_looks_as_follows: A[:.html" ;"title="stride.html" ;"title="ower_bound:length[:stride">ower_bound:length[:stride* Cilk Plus slicing looks as follows: A[:">stride.html" ;"title="ower_bound:length[:stride">ower_bound:length[:stride* Cilk Plus slicing looks as follows: A[: // All of vector A B[2:6] // Elements 2 to 7 of vector B C[:][5] // Column 5 of matrix C D[0:3:2] // Elements 0, 2, 4 of vector D Cilk Plus's array slicing differs from Fortran's in two ways: * the second parameter is the length (number of elements in the slice) instead of the upper bound, in order to be consistent with standard C libraries; * slicing never produces a temporary, and thus never needs to allocate memory. Assignments are required to be either non-overlapping or perfectly overlapping, otherwise the result is undefined.


2012:

Julia Julia is usually a feminine given name. It is a Latinate feminine form of the name Julio and Julius. (For further details on etymology, see the Wiktionary entry "Julius".) The given name ''Julia'' had been in use throughout Late Antiquity (e.g ...

Julia array slicing
is like that of
MATLAB MATLAB (an abbreviation of "MATrix LABoratory") is a proprietary multi-paradigm programming language and numeric computing environment developed by MathWorks. MATLAB allows matrix manipulations, plotting of functions and data, implementat ...
, but uses square brackets. Example: julia> x = rand(4, 3) 4x3 Array: 0.323877 0.186253 0.600605 0.404664 0.894781 0.0955007 0.223562 0.18859 0.120011 0.149316 0.779823 0.0690126 julia> x
, 2 The comma is a punctuation mark that appears in several variants in different languages. It has the same shape as an apostrophe or single closing quotation mark () in many typefaces, but it differs from them in being placed on the baseline o ...
# get the second column. 4-element Array: 0.186253 0.894781 0.18859 0.779823 julia> x , : # get the first row. 1x3 Array: 0.323877 0.186253 0.600605 julia> x :2,2:3 # get the submatrix spanning rows 1,2 and columns 2,3 2x2 Array: 0.186253 0.600605 0.894781 0.0955007


See also

*


References

{{DEFAULTSORT:Array Slicing Arrays Programming constructs Articles with example Ada code Articles with example ALGOL 68 code Articles with example D code Articles with example Fortran code Articles with example Perl code Articles with example Python (programming language) code