考试什么的都去死吧歌曲| 男人身体虚吃什么补| 肚子容易胀气是什么原因| 96年属什么命| 利字五行属什么| 紧急避孕药叫什么名字| 精索是什么| 谦虚的近义词是什么| 口腔溃疡是缺少什么维生素| 男人忽冷忽热说明什么| pe是什么意思| 6月是什么月| 瞳孔缩小见于什么病| 食人鱼长什么样子| 躯体化是什么意思| 肺静脉流的是什么血| 月经期间喝酒有什么危害| 检查胃镜需要提前做什么准备| 多彩的什么| 焦点是什么意思| 刀纸是什么| acs是什么意思| 吃什么东西补血最快最有效| 车代表什么生肖| 7什么意思| 化妆水是干什么用的| 草莓印是什么意思| 留守儿童什么意思| 甜菜根是什么| 十月十六号是什么星座| 母亲节做什么| 芒果不能和什么水果一起吃| 梦中梦是什么原因| 什么像什么似的什么| 什么样的河流| nars是什么牌子| 什么是业力| 生理期吃什么水果比较好| 扯证是什么意思| 1987年属什么的| 小便失禁是什么原因男性| 糖耐筛查主要检查什么| 鹌鹑蛋不能和什么一起吃| 戍是什么意思| 带状疱疹什么引起的| 为什么不建议吃三代头孢| 海鲜不能和什么一起吃| 世界上最硬的东西是什么| 铭是什么意思| 什么相关四字成语| 眼袋浮肿是什么原因| 甲申日五行属什么| 脑炎的后遗症是什么| 纵什么意思| 8月5日是什么星座| 脚心发凉是什么原因| 马什么坡| 续集是什么意思| 保妇康栓治疗什么妇科病| 回声不均匀是什么意思| 牙齿发麻是什么原因| 内能与什么有关| 头孢是什么| 胃息肉是什么症状| 十二月九号是什么星座| biw医学上是什么意思| 阳历六月是什么星座| 优甲乐过量有什么症状| 什么字五行属水| 11.19是什么星座| 刘邦和刘秀是什么关系| 心三联是指什么| 肛瘘是什么症状表现| 智商120是什么水平| 尿酸高喝什么茶| 咳嗽黄痰吃什么药| 早餐吃什么好| 心计是什么意思| 心包隐窝是什么意思| 大便次数多什么原因| 冰晶是什么东西| 2.1是什么星座| 包皮挂什么科| 孕妇吃红薯对胎儿有什么好处| 君子什么意思| 毛囊炎的症状是什么原因引起的| 献血有什么好处| 泽去掉三点水念什么| 一什么猪| 什么的黎明| 什么是黑户| 第二性征是什么意思| 热鸡蛋滚脸有什么作用| 辩证法是什么| 什么地什么| 81年属鸡是什么命| 南京有什么美食| 身上长红疙瘩很痒是什么原因| 军犬一般是什么品种| 肝郁气滞吃什么药好| 指甲弯曲是什么原因| 感冒吃什么药好| 孕妇梦见老公出轨是什么意思| 沈阳有什么特产| 玉戴久了会有什么变化| 6月13号是什么星座| 你叫什么名字英语怎么说| 古代男子成年叫什么| 肝上火有什么症状| 汐字五行属什么| 洋葱与什么食物相克| 菟丝子是什么| 早上起来眼皮肿是什么原因| 9.3是什么日子| 发烧怕冷是什么原因| 止步不前什么意思| 男生来大姨夫是什么意思| 脾胃虚寒吃什么中成药| 下午六点半是什么时辰| 不可或缺是什么意思| 养胃早餐吃什么好| 胆汁淤积症有什么症状| 小孩肛门瘙痒什么原因| 什么叫烟雾病| 意味什么| 耳鬓厮磨是什么意思| 什么样的笑容| 妆前乳是什么| 平均红细胞体积偏低是什么原因| 脚心痛什么原因| 东北有什么好玩的景点| epl是什么意思| 不能吃辣是什么原因| 皮蛋吃多了有什么危害| 冬天喝什么茶| acs是什么| 6月16日是什么日子| 灰枣与红枣有什么区别| 糖类抗原724偏高是什么原因| 空气炸锅能做什么| 习是什么结构的字| dragon是什么意思| 战略纵深是什么意思| 什么叫筋膜炎| 梦见柚子是什么兆头| 蛋疼是什么原因引起的| 心机女是什么意思| 喷的右边念什么| 精油有什么功效| 奶油霜是什么| 动手术后吃什么对伤口恢复比较快| 吉吉念什么| 过期的洗面奶可以用来做什么| 棉条是什么| 毫无违和感是什么意思| 地三鲜是什么| 专辑是什么| 黑胡桃色是什么颜色| 容易静电的人说明什么| pigeon是什么牌子| 吃什么可以补气血| 追光是什么意思| 离婚需要什么手续| 降火吃什么药| 有人的地方就有江湖什么意思| 抱窝是什么意思| vr眼镜是什么| 非甾体抗炎药是什么意思| ab型血可以给什么血型输血| 蚊子咬了为什么会痒| pc是什么| 大便羊粪状吃什么药| 96年的属什么| 属羊是什么命| 菩提是什么东西| 6月4号是什么星座| 谨言慎行下一句是什么| 为什么会一直流鼻涕| 甲状腺球蛋白低是什么原因| 编外人员是什么意思| 按摩头皮有什么好处| 拜谢是什么意思| 什么主筋骨| 小赤佬是什么意思| 儿童结膜炎用什么眼药水| 阑尾在人体的什么位置| 唐朝以后是什么朝代| 四是什么生肖| 心肌缺血吃什么药最好| 200年属什么生肖| 脾是什么| 成年人改名字需要什么手续| 肌肉痛是什么原因| 吃什么有助于睡眠效果好| 健康证长什么样| 血小板比积偏高是什么意思| 花瓣是什么意思| gmail是什么邮箱| 亲额头代表什么意思| 怀孕后乳房有什么变化| 甲状腺囊肿是什么病| 肤浅什么意思| 电焊打眼睛用什么眼药水| 时蔬是什么意思| 睡觉手发麻是什么原因| 六盘水为什么叫凉都| 肛门疼痛是什么原因引起的| 舌头发麻看什么科| 长白头发了吃什么才能把头发变黑| 服兵役是什么意思| 为什么游戏| 电器发生火灾用什么灭火器| 绞丝旁一个奇念什么| 激光脱毛对身体有什么危害| 二月初四是什么星座| 脾大是什么原因造成的怎么治疗| 开方是什么意思| 补钾用什么药| 黄鼠狼进屋是什么兆头| 晒伤用什么| 全价猫粮是什么意思| 衣原体检查是什么| 原味是什么意思| 为什么一直打哈欠| 11月27日是什么星座| 荨麻疹是什么引起| 小孩子晚上睡觉磨牙是什么原因| 什么的桌椅| 百香果和什么不能一起吃| 男怕穿靴女怕戴帽什么意思| 白细胞高是什么原因引起的| 没有白带是什么原因| 裙带菜不能和什么一起吃| 吃什么可以增大阴茎| 红艳煞是什么意思| 每天一杯蜂蜜水有什么好处| 尿分叉吃什么药好得快| 什么一| 咖啡烘培度有什么区别| 血糖高早餐吃什么最好| 楼房风水主要看什么| 堃怎么读什么意思| 从容的反义词是什么| 血栓的症状是什么| 10.8号是什么星座| 女王是什么意思| 不加大念什么| 异想天开什么意思| 1992年属什么生肖| 边际贡献是什么意思| 鹅梨帐中香是什么| 均可是什么意思| 小白龙叫什么名字| 心脏长什么样| 固体饮料是什么意思| 咕咕咕咕叫是什么鸟| 博美犬吃什么狗粮最好| 孕妇吃什么菜| 小腿有血栓是什么症状| 脂肪瘤挂什么科| 君子兰不开花是什么原因| 泡脚什么时候泡最好| 绿茶属于什么茶| 好的什么意思| 百度Jump to content

人民的意愿 历史的选择

From Wikipedia, the free encyclopedia
百度 北青报记者了解到,国美当年先后上线了美盈宝、美银票和投金宝等多款互联网理财产品。

In computer programming, array slicing is an operation that extracts a subset of elements from an array and packages them as another array, possibly in a different dimension from the original.

Common examples of array slicing are extracting a substring from a string of characters, the "ell" in "hello", extracting a row or column from a two-dimensional array, or extracting a vector from a matrix.

Depending on the programming language, 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

[edit]

For "one-dimensional" (single-indexed) arrays – vectors, sequences, strings etc. – the most common slicing operation is extraction of zero or more consecutive elements. If we have a vector containing elements (2, 5, 7, 3, 8, 6, 4, 1), and want to create an array slice from the 3rd to the 6th elements, we get (7, 3, 8, 6). In programming languages 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 removes the need for that index. This feature can be used, for example, to extract one-dimensional slices (vectors in 3D, including rows, columns, and tubes[1]) 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 + 2d parameters. For languages that allow arbitrary lower bounds for indices, like Pascal, the dope vector needs 1 + 3d entries.

If the array abstraction does not support true negative indices (as the arrays of Ada and Pascal 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 indicates the second-to-last item, while in a 0-based system, it refers to the very last item.

History

[edit]

The concept of slicing was surely known even before the invention of compilers. 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 (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 (1968) introduced comprehensive multi-dimension array slicing and trimming features.

Array slicing facilities have been incorporated in several modern languages, such as Ada, Cobra, D, Fortran 90, Go, Rust, Julia, MATLAB, Perl, Python, S-Lang, Windows PowerShell and the mathematical/statistical languages GNU Octave, S and R.

Timeline of slicing in various programming languages

[edit]

1964: PL/I

[edit]

PL/I provides two facilities for array slicing.

  • Using iSub DEFINING, an array slice can be declared using iSUB variables to map specific elements in a "base array" onto elements of the "defined array". iSUBs can define rows, columns, diagonals, or many-to-one mappings.[2]: pp.212–213  The following example defines Y as a one-dimensional slice consisting of the diagonal elements of the two-dimensional array X.
DECLARE X(5,5);
DECLARE Y(5) DEFINED(X(1SUB,1SUB));

A reference to Y(2) is a reference to X(2,2), and so on.

  • A slice, called a cross-section, of an array can be referred to by using asterisk as the subscript for one or more dimensions. The following code sets all the elements in the first column of X to zero. One or more subscripts can be specified by asterisks in an expression.[2]: p.43 
DECLARE X(5,5);
X(*,1)=0;

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:

      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 and C had similar restrictions.

1968: Algol 68

[edit]

Algol68 final report contains an early example of slicing, slices are specified in the form:

[lower 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:

[3, 3]real 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[1?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

1968: BASIC

[edit]

HP's HP 2000 systems, introduced in November 1968, used HP Time-Shared BASIC as their primary interface and programming language. This version of BASIC used slicing for most string manipulation operations. One oddity of the language was that it allowed round or square braces interchangeably, and which was used in practice was typically a function of the computer terminal being used.

Example:

10 A$="HELLO, WORLD"
20 PRINT A$(1,5)
30 PRINT A$[7,11]

Will produce:

HELLO
WORLD

The HP systems were widely used in the early 1970s, especially in technical high schools and many small industrial and scientific settings.[3] As the first microcomputers emerged in the mid-1970s, HP was often used as the pattern for their BASIC dialects as well. Notable examples include 1977's Apple BASIC, 1978's Atari BASIC, and 1979's Sinclair BASIC. This style of manipulation generally offers advantages in terms of memory use, and was often chosen on systems that shipped with small amounts of memory. Only Sinclair's dialect differed in any meaningful way, using the TO keyword instead of a comma-separated list:

10 LET a$="ABCDE"(2 to 4)
20 PRINT a$

Slicing was also selected as the basis for the ANSI Full BASIC standard, using the colon as the separator and thus differentiating between slicing and array access:

10 DIM A$(5)
20 LET A$(2)="HELLO, WORLD"
30 PRINT A$(2)(1:5)

While this style of access offered a number of advantages, especially for the small machines of the era, sometime after 1970 Digital Equipment Corporation introduced their own variation of BASIC that used the LEFT$, RIGHT$ and MID$ string functions. Microsoft BASIC was written on the PDP-10 and its BASIC was used as the pattern. Through the late 1970s the two styles were both widely used, but by the early 1980s the DEC-style functions were the de facto standard.

1970s: MATLAB

[edit]
>> 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

The : operator implements the stride syntax (lower_bound:upper_bound[:stride]) by generating a vector. 1:5 evaluates as [1, 2, 3, 4, 5]. 1:9:2 evaluates as [1, 3, 5, 7, 9]. A bare : evaluates the same as 1:end, with end determined by context.

1976: S/R

[edit]

Arrays in S and GNU R 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]
[1,]   25   28   31   34
[2,]   26   29   32   35
[3,]   27   30   33   36
> A[, 2:3, 3, drop = FALSE] # 3x2x1 cubic array subset (preserved dimensions)
, , 1

     [, 1] [, 2]
[1,]   28   31
[2,]   29   32
[3,]   30   33
> A[, 2, 3]  # single-dimension array along first dimension
[1] 28 29 30
> A[1, 2, 3] # single value
[1] 28

The Fortran 77 standard introduced the ability to slice and concatenate 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

1983: Ada 83 and above

[edit]

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

[edit]

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[0..2];   # (2, 5, 7)
@a[2..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 { !($_ % 3) } (0...$#a) ];    # 1st, 4th and 7th element (2,3,4)
@a[ grep { !(($_+1) % 3) } (0..$#a) ]; # every 3rd element (7,6)

1991: Python

[edit]

If you have the following list:

>>> nums = [1, 3, 5, 7, 8, 13, 20]

Then it is possible to slice by using a notation similar to element retrieval:

>>> nums[3]   # no slicing
7
>>> nums[:3]  # from index 0 (inclusive) until index 3 (exclusive)
[1, 3, 5]
>>> nums[1:5]
[3, 5, 7, 8]
>>> nums[-3:]
[8, 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[3:]
[7, 8, 13, 20]
>>> nums[3::] # == nums[3:]
[7, 8, 13, 20]
>>> nums[::3] # starting at index 0 and getting every third element
[1, 7, 20]
>>> nums[1:5:2] # from index 1 until index 5 and getting every second element
[3, 7]

The stride syntax (nums[1:5:2]) 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).[4]

Slice semantics potentially differ per object; new semantics can be introduced when operator overloading the indexing operator. With Python standard lists (which are dynamic arrays), every slice is a copy. Slices of NumPy arrays, by contrast, are views onto the same underlying buffer.

1992: Fortran 90 and above

[edit]

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

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   { Definition of a numerical Index }
Index J := ['A', 'B', 'C'] { Definition of a text-valued Index }
Variable X := Array(I, J, [[10, 20, 30], [1, 2, 3], ....]) { Definition of a 2D value }
X[I = 1, J = 'B']  -> 20  { Subscript to obtain a single value }
X[I = 1] ->  Array(J, [10, 20, 30])  { Slice out a 1D array. }
X[J = 2] -> Array(I, [20, 2, ....]) { Slice out a 1D array over the other dimension. }
X[I = 1..3]  {Slice out first four elements over I with all elements over J}

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

[edit]

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 = [1:50];           % A = [1, 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]]]   % Elements 0-3 and 10-14

Slicing of higher-dimensional arrays works similarly:

    A[-1, *]              % The last row of A
    A[[1:5], [2:7]]       % 2d array using rows 1-5 and columns 2-7
    A[[5: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 = [0:9] is an array of 10 integers. Then A[I] 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[I];             % B is the sorted version of A
    C = A[array_sort(A)]; % Same as above but more concise.

1999: D

[edit]

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 [8, 6] 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 [2, 5, 7, 3, 10, 6, 4, 1]. To create a copy of the array data, instead of only an alias, do:

auto b = a[2 .. 5].dup;

Unlike Python, D slice bounds don't saturate, so code equivalent to this Python code is an error in D:

>>> d = [10, 20, 30]
>>> d[1 : 5]
[20, 30]

The programming language SuperCollider implements some concepts from J/APL. Slicing looks as follows:

a = [3, 1, 5, 7]           // assign an array to the variable a
a[0..1]                    // return the first two elements of a
a[..1]                     // return the first two elements of a: the zero can be omitted
a[2..]                     // return the element 3 till last one
a[[0, 3]]                  // return the first and the fourth element of a

a[[0, 3]] = [100, 200]     // replace the first and the fourth element of a
a[2..] = [100, 200]        // replace the two last elements of a

// assign a multidimensional array to the variable a
a = [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 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 [3, 8, 13, 18])

2005: fish

[edit]

Arrays in fish 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[1 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

[edit]

Cobra supports Python-style slicing. If you have a list

nums = [1, 3, 5, 7, 8, 13, 20]

then the first 3 elements, middle 3 elements, and last 3 elements would be:

nums[:3]   # equals [1, 3, 5]
nums[2:5]  # equals [5, 7, 8]
nums[-3:]  # equals [8, 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

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> Write-Host -NoNewline $a[0, 1]
2 5
PS> # Take a slice out of it using the range operator:
PS> Write-Host -NoNewline $a[2..5]
7 3 8 6
PS> # Get the last 3 elements:
PS> Write-Host -NoNewline $a[-3..-1]
6 4 1
PS> # Return the content of the array in reverse order:
PS> Write-Host -NoNewline $a[($a.Length - 1)..0] # Length is a property of System.Object[]
1 4 6 8 3 7 5 2

2009: Go

[edit]

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{1, 3, 5, 7, 8, 13, 20}

then the first 3 elements, middle 3 elements, last 3 elements, and a copy of the entire slice would be:

nums[:3]  // equals []int{1, 3, 5}
nums[2:5] // equals []int{5, 7, 8}
nums[4:]  // equals []int{8, 13, 20}
nums[:]   // equals []int{1, 3, 5, 7, 8, 13, 20}

Slices in Go are reference types, which means that different slices may refer to the same underlying array.

Cilk Plus supports syntax for array slicing as an extension to C and C++.

array_base [lower_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

[edit]

Julia array slicing is like that of MATLAB, but uses square brackets. Example:

julia> x = rand(4, 3)
4x3 Array{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

julia> x[:, 2]                # get the second column.
4-element Array{Float64,1}:
 0.186253
 0.894781
 0.18859
 0.779823

julia> x[1, :]                # get the first row.
1x3 Array{Float64,2}:
 0.323877  0.186253  0.600605

julia> x[1:2,2:3]             # get the submatrix spanning rows 1,2 and columns 2,3
2x2 Array{Float64,2}:
 0.186253  0.600605
 0.894781  0.0955007

See also

[edit]

References

[edit]
  1. ^ Zhang, Zemin; Aeron, Shuchin (2025-08-08). "Exact Tensor Completion Using t-SVD". IEEE Transactions on Signal Processing. 65 (6). Institute of Electrical and Electronics Engineers (IEEE): 1511–1526. arXiv:1502.04689. Bibcode:2017ITSP...65.1511Z. doi:10.1109/tsp.2016.2639466. ISSN 1053-587X.
  2. ^ a b IBM Corporation (1995). PL/I for MVS & VM Language Reference.
  3. ^ "Passing the 10-year mark". MEASURE Magazine. Hewlett Packard. October 1976.
  4. ^ Millman, K. Jarrod; Aivazis, Michael (2011). "Python for Scientists and Engineers". Computing in Science and Engineering. 13 (2): 9–12. Bibcode:2011CSE....13b...9M. doi:10.1109/MCSE.2011.36.
一九三七年属什么生肖 ed50是什么意思 图谋不轨什么意思 野茶属于什么茶 里急后重吃什么药最好
乌鸡炖什么好吃 手发胀是什么原因造成的 巨蟹座女和什么座最配 hb什么意思 双鱼座和什么座最配
什么是对数 胃酸恶心想吐什么原因 卸磨杀驴什么意思 什么是庞氏骗局 首长是什么意思
什么流淌 罗红霉素胶囊治什么病 脑电图能检查出什么疾病 紫苏长什么样子图片 菲律宾货币叫什么
梦见自己生个女孩是什么意思hcv9jop1ns8r.cn 胎盘位置低有什么危险hcv8jop6ns0r.cn 左眼皮跳跳好事要来到是什么歌hcv9jop4ns5r.cn 梅干菜是什么菜做成的hcv8jop8ns9r.cn 纯粹什么意思hcv8jop5ns7r.cn
吃维生素a有什么好处hcv8jop3ns9r.cn 711是什么星座hcv9jop3ns2r.cn 乳腺结节什么症状表现hcv8jop8ns6r.cn 血清果糖胺测定是什么xinmaowt.com 中午12点到1点是什么时辰hcv7jop6ns1r.cn
1月13是什么星座hcv8jop3ns6r.cn 冰种翡翠属于什么档次hcv8jop2ns1r.cn 豁口是什么意思xscnpatent.com 农历五月二十是什么星座hcv8jop2ns2r.cn 心肌缺血吃什么好hcv9jop2ns0r.cn
越描越黑是什么意思hcv9jop3ns1r.cn 头痛是什么原因hcv7jop6ns2r.cn 黄皮什么时候上市hcv7jop6ns2r.cn 石女什么样hcv8jop1ns8r.cn 大肠杆菌感染吃什么药hcv8jop2ns7r.cn
百度