Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

MATLAB 배열을 Python 변수로 표현하기

matlab Python® 패키지는 MATLAB® 숫자형 배열을 Python 변수로 나타낼 수 있는 배열 클래스를 제공하여, Python과 MATLAB 간에 MATLAB 배열을 전달할 수 있도록 합니다.

Python에서 MATLAB 배열 생성하기

matlab Python 패키지에서 생성자(예: matlab.double, matlab.int32)를 호출하여 Python 세션에서 MATLAB 숫자형 배열을 만들 수 있습니다. 생성자의 이름은 MATLAB 숫자형을 나타냅니다.

Python에서 MATLAB double형 배열을 초기화하기 위해 사용자 지정 유형을 사용할 수 있습니다. 사용자 지정 유형은 이니셜라이저로 사용할 Python 추상 기본 클래스 collections.Sequence에서 상속되어야 합니다.

Python용 MATLAB Engine API를 사용하여 호출된 함수에 MATLAB 배열을 입력 인수로 전달할 수 있습니다. MATLAB 함수가 출력 인수로 숫자형 배열을 반환할 경우, 엔진은 이 배열을 Python에 반환합니다.

숫자를 포함하는 선택적 initializer 입력 인수로 배열을 초기화할 수 있습니다. initializer는 Python 시퀀스 유형(예: list, tuple 또는 기타 시퀀스 유형)이어야 합니다. 선택 사항인 size 입력 인수는 시퀀스의 배열 크기를 설정합니다. 여러 개의 숫자 시퀀스를 포함하도록 initializer를 지정하거나, size를 다차원으로 지정하여 다차원 배열을 만들 수 있습니다. 선택 사항인 is_complex 입력 인수를 True로 설정하여 복소수로 구성된 MATLAB 배열을 만들 수 있습니다. matlab 패키지는 다음 표에 나와 있는 MATLAB 배열 생성자를 제공합니다.

matlab 클래스

Python에서의 생성자 호출

matlab.double

matlab.double(initializer=None, size=None, is_complex=False)

matlab.single

matlab.single(initializer=None, size=None, is_complex=False)

matlab.int8

matlab.int8(initializer=None, size=None, is_complex=False)

matlab.int16

matlab.int16(initializer=None, size=None, is_complex=False)

matlab.int32

matlab.int32(initializer=None, size=None, is_complex=False)

matlab.int64a

matlab.int64(initializer=None, size=None, is_complex=False)

matlab.uint8

matlab.uint8(initializer=None, size=None, is_complex=False)

matlab.uint16

matlab.uint16(initializer=None, size=None, is_complex=False)

matlab.uint32

matlab.uint32(initializer=None, size=None, is_complex=False)

matlab.uint64b

matlab.uint64(initializer=None, size=None, is_complex=False)

matlab.logical

matlab.logical(initializer=None, size=None)c

matlab.object

생성자 없음. 함수가 MATLAB 객체에 핸들 객체나 값 객체를 반환할 경우 엔진은 matlab.object를 Python에 반환합니다.

a In Python 2.7 on Windows, matlab.int64 is converted to int32 in MATLAB. Also, MATLAB cannot return an int64 array to Python.

b In Python 2.7 on Windows, matlab.uint64 is converted to uint32 in MATLAB. Also, MATLAB cannot return a uint64 array to Python.

c Logicals cannot be made into an array of complex numbers.

N개의 요소를 가진 배열을 만들 경우, 이 배열은 MATLAB 배열이므로 크기는 1×N이 됩니다.

import matlab.engine
A = matlab.int8([1,2,3,4,5])
print(A.size)
(1, 5)

이니셜라이저는 5개의 숫자를 포함하는 Python list입니다. MATLAB 배열 크기는 1×5이고, tuple에서는 (1,5)로 표시됩니다.

Python에서의 MATLAB 배열 특성과 메서드

matlab 패키지 생성자를 사용하여 생성된 모든 MATLAB 배열은 다음 표에 나와 있는 특성과 메서드를 갖습니다.

특성 또는 메서드

용도

size

tuple로 반환되는 배열의 크기

reshape(size)

시퀀스 size로 지정된 대로 배열의 형태 변경

Python에서의 다차원 MATLAB 배열

Python에서 임의의 숫자형으로 구성된 다차원 MATLAB 배열을 만들 수 있습니다. 두 개의 Python list 변수를 사용하여 double형으로 구성된 2×5 MATLAB 배열을 만듭니다.

import matlab.engine
A = matlab.double([[1,2,3,4,5], [6,7,8,9,10]])
print(A)
[[1.0,2.0,3.0,4.0,5.0],[6.0,7.0,8.0,9.0,10.0]]

Asize 특성은 이 배열이 2×5 배열임을 보여줍니다.

print(A.size)
(2, 5)

Python에서 MATLAB 배열의 요소 참조하기

Python list 변수와 tuple 변수의 요소를 참조할 수 있는 것처럼 MATLAB 배열의 요소를 참조할 수 있습니다.

import matlab.engine
A = matlab.int8([1,2,3,4,5])
print(A[0])
[1,2,3,4,5]

MATLAB 배열의 크기는 (1,5)이므로, A[0][1,2,3,4,5]입니다. 이 배열의 요소를 참조하여 3을 얻습니다.

print(A[0][2])
3

Python 인덱싱은 0부터 시작합니다. Python 세션에서 MATLAB 배열의 요소에 액세스할 경우 0부터 시작하는 인덱싱을 사용하십시오.

다차원 MATLAB 배열의 요소를 참조합니다.

A = matlab.double([[1,2,3,4,5], [6,7,8,9,10]])
print(A[1][2])
8.0

Python에서 MATLAB 배열 슬라이싱

Python list 변수와 tuple 변수를 슬라이싱하는 것과 같은 방식으로 MATLAB 배열을 슬라이싱할 수 있습니다.

import matlab.engine
A = matlab.int8([1,2,3,4,5])
print(A[0][1:4])
[2,3,4]

슬라이스에 데이터를 할당할 수 있습니다. 다음 코드는 Python list에서 배열의 슬라이스에 데이터를 할당하는 것을 보여줍니다.

A = matlab.double([[1,2,3,4],[5,6,7,8]]);
A[0] = [10,20,30,40]
print(A)
[[10.0,20.0,30.0,40.0],[5.0,6.0,7.0,8.0]]

다른 MATLAB 배열이나, 숫자가 포함된 Python 이터레이블(Iterable)의 데이터를 할당할 수 있습니다.

다음과 같이 할당할 슬라이스를 지정할 수 있습니다.

A = matlab.int8([1,2,3,4,5,6,7,8]);
A[0][2:4] = [30,40]
A[0][6:8] = [70,80]
print(A)
[[1,2,30,40,5,6,70,80]]

참고

MATLAB 배열을 슬라이싱하는 것은 Python list를 슬라이싱하는 것과 다르게 동작합니다. MATLAB 배열을 슬라이싱하면 얕은 복사 대신 보기가 반환됩니다.

MATLAB 배열과 Python list가 동일한 값을 갖는 경우, 슬라이스를 할당하면 다음 코드에 표시된 대로 다른 결과값이 반환됩니다.

A = matlab.int32([[1,2],[3,4],[5,6]])
L = [[1,2],[3,4],[5,6]]
A[0] = A[0][::-1]
L[0] = L[0][::-1]
print(A)
[[2,2],[3,4],[5,6]]
print(L)
[[2, 1], [3, 4], [5, 6]]

Python에서 MATLAB 배열의 형태 변경하기

Python에서 reshape 메서드를 사용하여 MATLAB 배열의 형태를 변경할 수 있습니다. 입력 인수 size는 요소 개수를 유지하는 시퀀스여야 합니다. reshape를 사용하여 1×9 MATLAB 배열을 3×3 배열로 변경합니다.

import matlab.engine
A = matlab.int8([1,2,3,4,5,6,7,8,9])
A.reshape((3,3))
print(A)
[[1,4,7],[2,5,8],[3,6,9]]

관련 항목