배열 슬라이싱

Array slicing

컴퓨터 프로그래밍에서 배열 슬라이싱배열에서 요소들의 서브셋을 추출하여 다른 배열로 포장하는 작업으로, 아마도 원본과 다른 차원으로 포장되어 있을 것이다.

배열 슬라이싱의 일반적인 예는 일련의 문자열에서 하위 문자열, "헬로"의 ""을 추출하거나, 2차원 배열에서 행이나 을 추출하거나, 행렬에서 벡터를 추출하는 것이다.

프로그래밍 언어에 따라 배열 슬라이스는 비연속적 요소로 만들어질 수 있다. 또한 언어에 따라, 새 배열의 요소는 원래 배열의 요소와 별칭이 될 수 있다(즉, 메모리를 공유).

세부 사항

"1차원(단일 색인) 배열 - 벡터, 시퀀스, 문자열 등 – 가장 일반적인 슬라이싱 작업은 0개 이상의 연속 원소를 추출하는 것이다. 따라서 원소(2, 5, 7, 3, 8, 6, 4, 1)를 포함하는 벡터가 있고, 3번부터 6번 항목까지 배열 슬라이스를 생성하고자 한다면(7, 3, 8, 6번)을 얻는다. 0 기반 인덱싱 체계를 사용하는 프로그래밍 언어에서 슬라이스는 인덱스 2에서 5까지입니다.

모든 인덱스의 범위를 단일 값으로 줄이면 해당 인덱스가 효과적으로 제거된다. 예를 들어 이 기능은 3차원 배열에서 1차원 조각(벡터: 3D, 행, 열 및 튜브[1]) 또는 2차원 조각(직사각형 행렬)을 추출하는 데 사용할 수 있다. 그러나 런타임에 범위가 지정될 수 있으므로, 형식 확인 언어에는 실제로 사소한 지수를 제거하기 위해 명시적(비교적 시간) 표기법이 필요할 수 있다.

일반 배열 슬라이싱은 도프 벡터설명자를 통해 모든 배열, 즉 첫 번째 배열 요소의 주소를 포함한 기록, 그리고 나서 인덱싱 공식에서 각 인덱스의 범위와 해당 계수를 참조함으로써 구현될 수 있다. 이 기법은 또한 즉각적인 배열 전환, 인덱스 반전, 서브샘플링 등이 가능하다. 지수가 항상 0에서 시작하는 C와 같은 언어의 경우, d 지수를 가진 배열의 도프 벡터는 최소한 1 + 2d 파라미터를 가진다. 파스칼과 같이 지수에 대해 임의 하한을 허용하는 언어의 경우, 도프 벡터에는 1 + 3d 항목이 필요하다.

배열 추상화가 진정한 음의 지수(: Ada와 Pascal do)를 지원하지 않는 경우, 주어진 치수의 슬라이스 한계에 대한 음의 지수를 사용하여 해당 치수의 배열 끝에서 오프셋을 지정하기도 한다. 1-기반 체계에서 -1은 일반적으로 2-대-마지막 항목을 나타내며, 0-기반 체계에서는 마지막 항목을 의미한다.

역사

슬라이싱의 개념은 컴파일러가 발명되기 전부터 확실히 알려져 있었다. 언어적 특징으로서의 슬라이싱은 아마도 FORTRAN(1957)에서 시작되었을 것이며, 디자인보다는 유형과 범위 확인의 결과일 것이다. 구문에서는 실제 매개변수로 사용할 때 배열 요소(또는 절차 호출의 경우)의 하나 이상의 지수를 생략할 수 있다는 점에서 IAL(ALGOL 58)의 예비 보고서에서도 개념을 암시했다.

케네스 아이버슨APL(1957)은 매우 유연한 다차원 배열 슬라이싱이 있어 언어의 표현력과 인기에 크게 기여했다.

알골68(1968)은 종합 다차원 어레이 슬라이싱과 트리밍 기능을 도입했다.

어레이 슬라이싱 설비는 에이다 2005, 코브라, D, 포트란 90, 고, 러스트, 줄리아, MATLAB, , 파이톤, S-랑, 윈도 파워쉘과 수리/통계 언어 GNU 옥타브, S, R과 같은 몇 가지 현대 언어로 통합되었다.

다양한 프로그래밍 언어의 슬라이싱 타임라인

1966: 포트란 66

포트란 66의 프로그래머들은 행렬을 한 줄씩 자른 다음 그 열을 서브루틴에 전달할 때만 다음과 같은 이점을 얻을 수 있었다.

      서브루틴 프린트 V(VEC, )         진짜 VEC(*)         프린트 *, (VEC(I), I = 1, )               프로그램 메인         매개변수( = 3)         진짜 매트릭스(, )         데이터 매트릭스/1, 1, 1, 2, 4, 8, 3, 9, 27/         호출 인쇄 V(매트릭스(1, 2), )        

결과:

   2.000000       4.000000       8.000000 

FORTRAN 66에는 도프 벡터가 없으므로 슬라이스의 길이는 인수로 또는 다른 수단으로도 전달되어야 한다. SUBROUTINE1970년대 파스칼C는 비슷한 제한을 가지고 있었다.

1968: 알골 68

Algol68 최종 보고서는 슬라이싱의 초기 예를 포함하고 있으며, 슬라이스는 다음과 같은 형태로 명시되어 있다.

[하한값:하한값] character 확장 문자 집합이 있는 컴퓨터용 ¢ 

또는:

(하단 경계..상한) # 6비트 문자만 있는 컴퓨터용. # 

두 한계 모두 포함되며 생략할 수 있으며, 이 경우 선언된 배열 한계로 기본 설정된다. 보폭 시설이나 대각선 슬라이스 별칭은 수정된 보고서의 일부에 포함되지 않는다.

예:

[3, 3]실제 a := (1, 1, 1, 1) (2, 4, 8), (3, 9, 27); # 변수 행렬 #, [,] real c = (1, 1, 1, 1) (2, 4, 8,), (3, 9, 27); # 상수 행렬, 크기는 암시적 # 
ref[]real 행 := a[2,]; # alias/ref를  슬라이스에 # ref[]real col2 = a[, 2], # 영구 alias/ref를 두 번째 열에 # 
인쇄(a[:, 2], newline); # 2열 슬라이스 # 인쇄(a[1⌈a, :], # 마지막슬라이스 # 인쇄(a[:[, 2aa, newline]), # 마지막 열 슬라이스 # 인쇄((a[:2,:2], newline); # 선두 2-by-2 submatrix "s" # 
+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 3차원 또는 입방 배열 비율 > A(:, :, 3) 1차원과 2차원의 3x4 2차원 배열 비율  ans =    8  3  5  7   8  9  1  4   4  4  2  5  > A(:, 2:3, 3) 1차원과 2차원을 따라 3x2 2차원 배열 비율  ans =    3 5   9 1   4 2  > A(2:종지부를 찍다, :, 3) '끝' 키워드를 사용한 % 2x4 2차원 배열, GNU 옥타브 3.2.4와 함께 작동  ans =     6    1    4    6   10    1    3    1  > A(1, :, 3) 두 번째 차원을 따르는 단일 섀시 배열 비율(%)  ans =    8  3  5  7  > A(1, 2, 3) % 단일 값 ans = 3 

1976: S/R

SGNU R의 배열은 항상 한 가지 기반이기 때문에 새로운 슬라이스의 지수는 이전 지수에 관계없이 각 차원에 대한 하나의 것으로 시작할 것이다. 길이가 1인 치수는 삭제된다(드롭 = FALSE 제외). 치수 이름(있는 경우)은 보존된다.

> A <- 배열하다(1:60, 어슴푸레한 = c(3, 4, 5)) # 3x4x5 입체 또는 입체 배열 > A[, , 3] # 1차원과 2차원을 따라 3x4 2차원 배열      [, 1] [, 2] [, 3] [, 4] [1,]   25   28   31   34 [2,]   26   29   32   35 [3,]   27   30   33   36 > A[, 2:3, 3, 떨어뜨리다 = 거짓의] # 3x2x1 입방 배열 부분 집합(일반 치수) , , 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: 싱클레어 BASIC ZX80/81/스펙트럼

ZX80/81/Spectrum의 표준 ROM은 문자열을 자르고 접합할 수 있는 기능을 갖춘 BASIC을 제공한다.

필요한 배열 슬라이스를 가리키는 명령 부분(x TO y)에서 x와 y 값은 생략할 수 있으며, 연결된 모든 배열 셀(FROM x to end ) 또는 (begin TO y)를 사용하는 의미를 부여한다. 다차원 배열의 경우 슬라이싱은 마지막 레벨의 차원으로만 가능하다.

10 LET a$="ABCDE"(2  4) 20 프린트 a$ 

생산:

BCD 
10 LET a$="ABCDE" 20 LET b$=a$(4 )+a$(2  3)+a$(1) 30 프린트 b$ 

생산:

데브카 

1983: 에이다 83 이상

Ada 83은 모든 어레이 유형에 대해 슬라이스를 지원한다. Fortran 77과 같이, 그러한 배열들은 다른 서브루틴에 참고하여 통과할 수 있었고, 길이는 또한 일종의 짧은 도프 벡터로서 서브루틴에 투명하게 전달될 것이다.

와 함께 텍스트_IO;   절차 메인 이다    텍스트 :  := "ABCDE"; 시작되다    텍스트_IO.Put_Line (텍스트 (2 .. 4)); 종지부를 찍다 메인; 

생산:

BCD 

주: Ada에서 지수는 n 기반이기 때문에 용어 Text (2 .. 4) 기본 인덱스가 2인 배열이 생성됨

정의: Text_IO.Put_Line 다음과 같은 경우:

꾸러미 에이다.텍스트_IO 이다        절차 Put_Line(항목 :   ); 

정의: String 다음과 같은 경우:

꾸러미 표준 이다     아형의 긍정적인 이다 정수 범위 1 .. 정수'지난;     타자를 치다  이다 배열하다(긍정적인 범위 <>)  캐릭터;    실용주의 (); 

에이다님이 에 있는 것처럼 진정한 부정 지수를 지지하기 때문에 type History_Data_Array is array (-6000 .. 2010) of History_Data; 그것은 부정적인 지수에 특별한 의미를 부여하지 않는다. 위의 예에서 Some_History_Data (-30 .. 30) 을 자르다 History_Data 기원전 31년부터 AD 30년까지 (0년이 없었기 때문에, 숫자 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) 

펄은 마이너스 리스트 지수를 지지한다. -1 지수는 마지막 요소, -2 penultimate 요소 등. 또한 펄은 다음과 같은 표현에 기반한 슬라이싱을 지원한다.

@a[ 3.. $#a ];   # 끝까지 제4원소 (3, 8, 6, 4) @a[ 기름칠하다 { !($_ % 3) } (0...$#a) ];    # 제1원소, 제4원소, 제7원소(2,3,4) @a[ 기름칠하다 { !(($_+1) % 3) } (0..$#a) ]; # 제3원소(7,6)마다 

1991: 파이썬

다음 목록이 있는 경우:

>>> 숫자 = [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 penultimate 요소 등을 나타낸다. 파이톤은 또한 추가 콜론과 값을 추가하여 단계적 특성을 허용한다. 예를 들면 다음과 같다.

>>> 숫자[3:] [7, 8, 13, 20] >>> 숫자[3::] # == 숫자[3:] [7, 8, 13, 20] >>> 숫자[::3] # 인덱스 0에서 시작하여 세 번째 요소마다 가져오기 [1, 7, 20] >>> 숫자[1:5:2] # 인덱스 1에서 인덱스 5까지 매초 요소 가져오기 [3, 7] 

Stride 구문(Stride 구문)nums[1:5:2])는 1990년대 후반에 파이썬 '매트릭스-SIG'(특수 이익집단)에서 과학 유저들이 제기한 요청의 결과로 도입되었다.[2]

슬라이스 의미론은 개체마다 잠재적으로 다를 수 있다. 즉, 운영자가 인덱싱 운영자에게 과부하를 가할 때 새로운 의미론이 도입될 수 있다. Python 표준 목록(동적 배열)을 사용하면 모든 슬라이스가 복사본이 된다. 반대로 NumPy 배열의 슬라이스는 동일한 기본 버퍼에 대한 보기입니다.

1992: 포트란 90 이상

Fortran 90에서 슬라이스는 양식에 지정된다.

하한_바운드:상행의[:성큼성큼 걷다] 

두 한계 모두 포함되며 생략할 수 있으며, 이 경우 선언된 배열 한계로 기본 설정된다. Stride 기본값은 1. 예:

진짜, 치수(m, n):: a  ! 행렬의 선언    인쇄하다 *, a(:, 2) ! 두 번째 열 인쇄하다 *, a(m, :) ! 마지막 줄 인쇄하다 *, a(:10, :10) 10대 10으로 앞서가고 있어! 

1994: 분석학

Analytica에서 배열 값의 각 차원은 지수 변수로 식별된다. 자르거나 첨자를 붙일 때 구문은 치수의 이름을 지정하여 자르거나 첨자를 붙이는 치수를 식별한다. 다음과 같은 경우:

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] -> 어레이(I, [20, 2, ....]) { 다른 차원 위로 1D 어레이를 잘라내십시오. }} X[I = 1..3] {모든 요소가 J}보다 높은 I 위에 있는 4개의 요소를 먼저 제거하십시오. 

슬라이싱 및 첨자로 인덱스 이름을 지정하는 것은 고정된 파라미터 순서에 의존하는 대신 함수 호출에서 파라미터 이름을 지정하는 것과 유사하다. 슬라이싱에서 인덱스 이름을 지정할 때의 한 가지 장점은 프로그래머가 인덱스의 순서를 기억할 필요가 없다는 것이다. 더 깊은 장점은 X의 차원이 바뀌었을 때 다시 쓸 필요 없이 표현이 자동적이고 안전하게 일반화되는 것이다.

1998: S-랑

어레이 슬라이싱은 버전 1.0에서 도입되었다. 이전 버전은 이 기능을 지원하지 않았다.

A가 다음과 같은 1-d 배열이라고 가정하자.

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

그런 다음 A의 처음 5개 요소의 배열 B를 다음과 같이 생성할 수 있다.

    B = A[:4]; 

마찬가지로 B는 다음을 통해 A의 마지막 5개 요소 배열에 할당될 수 있다.

    B = A[-5:]; 

1-d 슬라이싱의 다른 예는 다음과 같다.

    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 

고차원 배열의 슬라이싱도 이와 유사하게 작동한다.

    A[-1, *] % A[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: D

배열을 고려하십시오.

인트로[] a = [2, 5, 7, 3, 8, 6, 4, 1]; 

한 조각씩 떼어내라:

인트로[] b = a[2 .. 5]; 

그리고 의 내용 b 될 것이다 [7, 3, 8]. 슬라이스의 첫 번째 인덱스는 포함되고, 두 번째 인덱스는 제외된다.

자동차로 c = a[$ - 4 .. $ - 2]; 

동적 배열은 c 포함하다 [8, 6] 왜냐하면 [] 안에 $ 기호는 배열의 길이를 가리킨다.

D 배열 슬라이스는 원래 배열과 별칭으로 지정되므로:

b[2] = 10; 

라는 뜻이다. a 이제 그 내용을 알게 되었다. [2, 5, 7, 3, 10, 6, 4, 1]. 배열 데이터의 복사본을 생성하려면 별칭만 생성하지 말고 다음을 수행하십시오.

자동차로 b = a[2 .. 5].속이다; 

Python과 달리 D 슬라이스 한계가 포화되지 않기 때문에 이 Python 코드에 해당하는 코드는 D:

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

2004: 슈퍼콜라이더

프로그래밍 언어 SuperColliderJ/APL의 몇 가지 개념을 구현한다. 슬라이싱은 다음과 같이 보인다.

a = [3, 1, 5, 7]           // 변수 a에 배열 할당 a[0..1]                    // a의 처음 두 요소 반환 a[..1]                     // a의 처음 두 요소 반환: 0을 생략할 수 있음 a[2..]                     // 마지막 요소까지 요소 3을 반환 a[[0, 3]]                  // a의 첫 번째 요소와 네 번째 요소를 반환하십시오.  a[[0, 3]] = [100, 200]     // a의 첫 번째 및 네 번째 요소를 교체하십시오. a[2..] = [100, 200]        // a의 마지막 두 요소를 교체하십시오.  // 다차원 배열을 변수 a에 할당 a = [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19]];  a.얇게 썰다(2, 3);             // 좌표 2와 3이 있는 슬라이스(제13장) a.얇게 썰다(못을 박다, 3);           // 직교 슬라이스를 취한다([3, 8, 13, 18]). 

2005: 생선

물고기의 배열은 항상 한 가지 기반이기 때문에 새로운 조각의 지수는 이전 지수와 상관없이 한 가지로부터 시작할 것이다.

> 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: 코브라

코브라는 파이톤 스타일의 슬라이싱을 지원한다. 만약 당신이 리스트를

숫자 = [1, 3, 5, 7, 8, 13, 20] 

그 다음 처음 3개 요소, 중간 3개 요소 및 마지막 3개 요소는 다음과 같을 것이다.

숫자[:3]   # 동격 [1, 3, 5] 숫자[2:5]  # 동급 [5, 7, 8] 숫자[-3:]  # 동급 [8, 13, 20] 

코브라는 또한 '루프용 숫자'를 위한 슬라이싱 스타일의 구문을 지원한다.

을 위해 i  2 : 5     인쇄하다 i # 2, 3, 4번 인쇄  을 위해 j  3     인쇄하다 j # 0, 1, 2 인쇄 

2006: Windows PowerShell

어레이는 PowerShell에서 제로 기반이며 쉼표 연산자를 사용하여 정의할 수 있다.

PS > a달러 = 2, 5, 7, 3, 8, 6, 4, 1 PS > # $a의 처음 두 요소 인쇄: PS > "$(a달러[0, 1])" 2 5 PS > # 레인지 오퍼레이터를 사용하여 슬라이스를 빼내십시오. PS > "$(a달러[2..5])" 7 3 8 6 PS > # 마지막 3가지 요소: PS > "$(a달러[-3..-1])" 6 4 1 PS > # 배열의 내용을 역순으로 반환: PS > "$(a달러[(a달러.길이 - 1)..0])" # 길이는 시스템의 속성이다.목적어[] 1 4 6 8 3 7 5 2 

2009: 바둑

Go는 슬라이싱에 파이썬 스타일의 구문을 지원한다(부정 지수를 제외하면) 배열과 조각은 얇게 썰 수 있다. 한 조각이 있으면

숫자 := []인트로{1, 3, 5, 7, 8, 13, 20} 

그런 다음 첫 번째 세 가지 요소, 중간 세 가지 요소, 마지막 세 가지 요소 및 전체 슬라이스의 복사본이 다음과 같을 것이다.

숫자[: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++의 확장으로 배열 슬라이싱을 위한 구문을 지원한다.

array_base [하한_바운드:길이[:성큼성큼 걷다]]* 

Cilk Plus 슬라이싱은 다음과 같다.

A[:]     // 모든 벡터 A B[2:6]   // 벡터 B의 요소 2 ~ 7 C[:][5]  // 행렬 C의 5열 D[0:3:2] // 벡터 D의 원소 0, 2, 4 

Cilk Plus의 어레이 슬라이싱은 두 가지 면에서 Fortran과 다르다.

  • 두 번째 매개변수는 표준 C 라이브러리와 일치하기 위해 상한 대신 길이(슬라이스의 요소 수)이다.
  • 슬라이싱은 절대 일시적인 것이 아니므로 메모리를 할당할 필요가 없다. 할당은 겹치지 않거나 완전히 겹치도록 요구되며 그렇지 않으면 결과가 정의되지 않는다.

2012년: 줄리아

줄리아 배열 슬라이싱MATLAB의 그것과 같지만 대괄호를 사용한다. 예:

줄리아> x = 랜드(4, 3) 4x3 어레이{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  줄리아> x[:, 2]                # 두번째 칼럼을 얻는다. 4-element 어레이{Float64,1}:  0.186253  0.894781  0.18859  0.779823  줄리아> x[1, :]                # 첫 번째 줄을 잡는다. 1x3 어레이{Float64,2}:  0.323877  0.186253  0.600605  줄리아> x[1:2,2:3]             # 1,2열과 2,3열에 걸쳐 있는 서브트릭스 획득 2x2 어레이{Float64,2}:  0.186253  0.600605  0.894781  0.0955007 

참고 항목

참조

  1. ^ Zhang, Zemin; Aeron, Shuchin (2017-03-15). "Exact Tensor Completion Using t-SVD". IEEE Transactions on Signal Processing. Institute of Electrical and Electronics Engineers (IEEE). 65 (6): 1511–1526. doi:10.1109/tsp.2016.2639466. ISSN 1053-587X.
  2. ^ Millman, K. Jarrod; Aivazis, Michael (2011). "Python for Scientists and Engineers". Computing in Science and Engineering. 13 (2): 9–12.