기본 콘텐츠로 건너뛰기

라벨이 array인 게시물 표시

[matplotlib]quiver()함수

[numpy] 배열(np.array) 객체들의 결합

배열 객체들의 결합(concatenate) 관련된 내용 차원(dimension) 두 개이상의 배열객체를 결합하여 단일한 배열 객체로 만들 수 있습니다. 배열 객체는 차원에 따라 형태가 달라집니다. 그러므로 같은 형태의 배열들 사이에서 결합이 이루어지며 결합의 기준이 되는 차원(축)을 지정해야 됩니다. 예를 들어 2×3, 2×3의 형태를 지닌 두 배열의 결합에서 첫번째 축-0번째 인덱스-을 기준으로 하면 결합된 형태는 4×6됩니다. 다음의 함수들은 두 배열 객체를 결합하기 위해 사용하는 것으로 특히 1,2 차원의 배열들의 결합에 적용됩니다( stack 함수 참조). np.vstack([x,y,...]) 배열 형태의 0번째 인덱스가 수정되는 방향으로 결합, 즉 수직적(행방향)으로 연결 인수는 리스트 형식으로 전달 hstack([x,y,...]) 배열 형태의 1번째 인덱스가 수정되는 방향으로 결합, 즉 수평적(열방향)으로 연결 인수는 리스트 형식으로 전달 np.random.seed(1) a1=np.random.randint(10, size=(3)) b1=np.random.randint(10, size=(3)) print(f"shape of a1: {a1.shape}\nshape of b1: {b1.shape}") shape of a1: (3,) shape of b1: (3,) 위 객체 a1, b1은 벡터입니다. 두 벡터를 행단위로 결합하면 2행이 되며 열단위로 결합하면 여전히 벡터가 됩니다. ab1v=np.vstack([a1,b1]) ab1h=np.hstack([a1, b1]) print(f"shape of ab1v: {ab1v.shape}\nshape of ab1h: {ab1h.shape}") shape of ab1v: (2, 3) shape of ab1h: (6,) 행렬의 경우 역시 마찬가지 입니다. 행단위 결합은 차원의 첫번째 인덱스, 열단위 결합으로 두번째 인덱스가 ...

[Linear Algebra] 파이썬으로 행렬 객체 만들기

행렬 객체 만들기 python에서 행렬 객체를 생성하기 위해서는 numpy, pandas 모듈을 사용합니다. numpy 모듈에서 array() 함수는 다른 행렬 객체를 생성하는 대부분 함수의 기반이 되는 함수입니다. import numpy as np from sympy import * x=np.array([1,2,3]); x array([1, 2, 3]) 위 객체 x는 3개의 요소로 구성된 벡터입니다. 즉 하나의 차원을 가집니다( 차원(dimension) 참조). 객체의 차원과 그에 따른 형태는 각각 .ndim, .shape 속성을 확인할 수 있습니다. x.ndim, x.shape (1, (3,)) 위 결과에 의하면 객체 x는 1차원으로 3개의 요소들로 구성됨을 나타냅니다. 같은 요소들로 구성된 다음 객체 x1은 행렬입니다. x1=np.array([[1],[2],[3]]); x1 array([[1], [2], [3]]) print(x1) [[1] [2] [3]] 파이썬의 함수 print() 는 결과의 자료형 등의 속성을 배제한 상태로 출력합니다. x1.ndim, x1.shape (2, (3, 1)) 객체 x1는 2차원 즉, 2개의 축으로 행과 열로 구성됩니다. 그러나 행 또는 열 중 하나가 1일 경우 실제적으로 1차원인 벡터입니다. 파이썬에서 벡터와 행렬을 구분한다는 것은 매우 중요합니다. 벡터, 행렬 연산의 경우 기본적으로 차원을 조정해야 하기 때문입니다. 예를 들어 행과 열이 바꾸는 것을 전치(transpose)라고 하며 객체.T 로 실행됩니다. 그러나 벡터일 경우는 실행되지 않습니다. x.T array([1, 2, 3]) x1.T array([1, 2, 3]) 벡터인 객체 x를 행렬로 변경하기 위해 numpy객체.reshape(행의 수, 열의 수) 메소드를 사용할 수 있습니다. 이 함수에서 행의수 또는 열의수에 -1을 지정하면 다른쪽에 지정된 수에 의해 자동으로 변환됩니다. 예를 ...

[linear algebra] 벡터와 행렬(vector & Matrix)

벡터와 행렬(vector & Matrix) 벡터(vector) 행렬(Matrix) 파이썬에서 벡터, 행렬 등은 numpy.array() 함수를 사용하여 생성합니다. 또한 각 객체는 차원(dimension) 을 갖습니다. 벡터(vector) A = (3,1), B = (2,3)는 두 개 축 위에 표시되는 좌표(점)로 나타낼 수 있습니다. 각 점은 어떤 기준에 대한 크기만을 가집니다. 예를 들어 원점 O(0,0)를 기준으로 A 또는 B의 거리는 식 1과 같이 계산할 수 있습니다. \begin{align}\Vert \overline{OA}\Vert &=\sqrt{(3-0)^2+(1-0)^2}=\sqrt{10}\\ \Vert \overline{OB}\Vert &=\sqrt{(2-0)^2+(3-0)^2}=\sqrt{13}\end{align} (식 1) 식 1의 $\overline{OA}$는 점 O와 점 A 사이의 거리를 계산한 것입니다. 이 거리를 점 O를 시작하여 A 까지의 거리로 표현한다면 이동 방향이 고려된 것입니다. 이와 같이 거리 즉, 이동 크기에 방향을 함께 고려한 량을 벡터(Vector) 라고 하고 식 2와 같이 화살표를 첨가하여 나타냅니다. 일반적으로 출발점이 원점(O)인 경우 출발점을 생략하며 벡터 표시인 화살표 없이 단순히 알파벳 소문자로 표시합니다. 벡터의 관점에서 보면 식 1은 벡터 a와 벡터 b의 길이(크기)를 계산한 것으로 놈(Norm) 이라고 합니다. 벡터는 행과 열을 구분할 수 없습니다. 일반적으로 식 2와 같이 한 행으로 표시하지만 많은 경우 세로로 정렬됨을 의미 합니다. 이러한 표시를 열벡터 라고 하지만 실제로는 행과 열로 구성된 행렬입니다. 또한 행렬(Matrix) 의 경우는 대문자 알파벳으로 나타내며 벡터, 행렬을 구성하는 각각의 수를 요소(element)라고 합니다. \begin{align}&\overrightarrow{oa}=\vec{a}=\begin{bmatr...

[numpy] array 함수

array 함수 배열은 ndarray이라고도 하는데 이 용어는 N-dimensional array의 약어로서 여러개의 값들을 구조적으로 나타낼 수 있는 numpy 라이브러리 기본 데이터형입니다. 다음과 같은 특성을 가집니다. 배열은 여러개의 리터럴(literal, row data)을 포함할 수 있으며 각각을 요소(element)라고 합니다. 배열 내에 각 요소들은 인덱스(index)라고 하는 음이 아닌 정수형태의 특정한 번호를 가집니다. 모든 요소는 동일한 유형이어야 합니다. 배열은 여러 차원으로 구성할 수 있으며 차원을 ndim속성으로 확인할 수 있습니다. 배열의 모양은 각 차원의 수를 표시한 것으로 shape속성으로 확인 할 수 있습니다. numpy 배열 객체의 생성은 기본적으로 np.array() 함수를 사용합니다. np.array(객체, dtype=None) 객체는 리스트형입니다. 각 요소의 자료형은 dtype으로 지정할 수 있습니다. dtype=None(기본값)일 경우는 입력된 자료에 따라 자동으로 지정됨 다음은 1차원 배열을 생성하기 위해 리스트 형식인 [1, 2, 3]을 np.array()함수에 전달한 것입니다. import numpy as np a = np.array([1, 2, 3]) a #(1) array([1, 2, 3]) print(a) #(2) [1 2 3] 위 코드 (1)과 같이 객체를 반환하면 배열(array)가 명시되는데 반해 다음 코드(2)와 같이 print() 함수에 의한 출력은 단지 내용만을 반환합니다. 위 객체 a는 1차원 벡터로서 모든 요소들이 하나의 대괄호로 묶여있는 상태입니다. 다음 객체 A는 대괄호 내에 두개의 별도의 대괄호를 포함하는 구조입니다. A=np.array([[1,2], [3,4]]) print(A) [[1 2] [3 4]] 위 객체 A는 pandas.DataFrame() 함수를 적용하여 표의 형태로 나타낼 수 있습니다. Ad...

[numpy] 인덱스와 슬라이싱(Index & Slicing)

인덱스와 슬라이싱(index & slicing) 인덱스 슬라이싱 배열 의 차원 과 그차원의 인덱스 를 참조할 수 있습니다. 인덱스 numpy의 자료형인 배열(array)은 리스트들로 구성됩니다. 객체 a와 같이 한개의 리스트 작성된 경우를 벡터(vector) 라고 합니다. 다음 코드의 랜덤수 생성은 랜덤수 생성을 위한 numpy 함수들 참조 np.random.seed(10) a=np.random.randint(0, 11, size=10) a array([ 9, 4, 0, 1, 9, 0, 1, 10, 8, 9]) print(f"a의 차원,:{a.ndim}, a의 모양{a.shape}") a의 차원,:1, a의 모양(10,) 위 결과와 같이 객체 a는 1차원으로 10개의 요소를 포함합니다. 벡터는 1차원이므로 1개의 축만이 존재하므로 객체의 모양은 "크기,"와 같이 숫자 한개로 표시됩니다. 리스트는 최왼쪽부터 0으로 시작되는 음이 아닌 정수인 인덱스를 가집니다( 문자열의 인덱스 참조 ). 배열 역시 리스트로 구성되므로 같은 형태의 인덱스를 가집니다(표 1). 표 1 객체 a(벡터)의 인덱스 요소 9 4 0 1 9 0 1 10 8 9 인덱스 0 1 2 3 4 5 6 7 8 9 역인덱스 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 표 1에서 나타낸 것과 같이 인덱스(index)는 최왼쪽의 요소부터 시작하는 음이 아닌 정수이며 역으로 마지막 요소를 -1로 시작하는 음의 정수를 인덱스로 사용할 수 있습니다. 이를 역인덱스(inverse index) 라고 합니다. 표1의 형식으로 인덱스를 사용하여 지정한 위치의 값을 호출하거나 수정할 수 있습니다. 객체이름[인덱스] (식 1) a[2] 0 a[2]=123; a array([ 9, 4, 1...

배열(Numpy. array)

내용 배열 객체의 자료형 배열 결합(concatenate) 배열의 분할 배열 객체의 자료형 자료형 (data type)은 입력된 데이터를 위한 메모리의 크기를 확정하기 위한 것입니다. 그러므로 데이터 형(data type)을 명시하지 않은 상태에서 여러 유형이 혼재된 경우 일반적으로 큰 메모리가 소비되는 형태로 자동 지정되지만 경우에 따라서는 메모리 과부하 상태로 인해 자료의 손실이 발생할 수 있습니다. 그러므로 다양한 자료형이 혼재된 경우 명시적으로 데이터 타입을 지정하는 것이 안전합니다. np.array() 함수를 사용하여 배열 객체를 생성할 경우 dtype에 인수를 전달함으로서 배열의 데이터형을 지정할 수 있습니다. 그러나 이 값을 지정하지 않을 경우 그 데이터형은 자동으로 지정되는데 일반적으로 numpy 배열의 기본 데이터 형은 실수형(np.float64)입니다. 이것은 정수형과 실수형이 혼합되어 있을 경우 실수형으로 인식된다는 의미입니다. x=np.ones(1) x array([1.]) x.dtype dtype('float64') 위 속성 dtype은 객체의 데이터 형을 반환하지만 역으로 그 속성을 사용하여 객체의 데이터 형을 지정할 수 있습니다. 예를 들어 다음 객체 x는 실수(부동소수)로 입력하였지만 객체에 int 32를 지정하여 정수형으로 변환할 수 있습니다. x=np.ones(1, dtype=np.int32) x array([1], dtype=int32) x.dtype dtype('int32') 다음 표는 numpy 배열에서 사용할 수 있는 자료형의 종류입니다. 구분 type(code) 예 숫자형 boolean bool(b) [True, False] 정수형 int8(i1) [-2, 0, 1,2] int16(i...