본문 바로가기
반응형

numpy43

[파이썬 numpy] 절댓값 구하는 함수 [파이썬 numpy] 절댓값 구하는 함수 넘파이에서 절댓값을 수할 때는 abs 메소드를 사용합니다. 숫자의 절댓값 >>> import numpy as np>>> np.abs(-222)222 배열의 절댓값 >>> A=np.array([1,2,-3,-5])>>> np.abs(A)array([1, 2, 3, 5]) 2020. 11. 12.
[파이썬 numpy] 배열에서 정수와 소수부분 분리 [파이썬 numpy] 배열에서 정수와 소수부분 분리 modf 함수를 사용하면 배열의 정수와 소수부분을 분리할 수 있습니다. 정수부분과 소수부분을 각각 튜플의 원소로 반환합니다. 변수 두개를 입력할 경우 각 변수에 저장할 수도 있습니다. 배열의 정수와 소수부분을 튜플로 반환 배열을 하나 정의합시다. >>> import numpy as np>>> A=np.array([1.3,2.5,-1.3,-2.5]) modf 메소드를 사용해봅시다. >>>np.modf(A)(array([ 0.3, 0.5, -0.3, -0.5]), array([ 1., 2., -1., -2.])) 정수부분과 소수부분이 각각 튜플의 원소로 반환됩니다. 정수부분과 소수부분을 변수에 저장 아래와 같이 변수 두개를 선언해줍니다. >>> A1,A2=.. 2020. 11. 12.
[파이썬 numpy] 배열의 축(axis) 이해하기 [파이썬 numpy] 배열의 축(axis) 이해하기 배열에는 축이라는 헷갈리는 개념이 있습니다. 특히 concatenate 메소드를 사용하여 배열을 이어붙일때 그렇습니다. 배열의 축이 헷갈리는 이유는 행렬개념에 익숙해져 있기 때문입니다. 차원이 높아지며 우리가 생각하는 행과 열의 순서가 파괴되는 듯한 느낌을 받는데, 이 문제만 해결하면 축은 아주 쉬워집니다. 차원을 높여가며 이해해봅시다. 1차원 배열 먼저 1차원 배열을 하나 정의해봅시다. >>> A1=np.array([1,2,3,4,5])>>> A1array([1, 2, 3, 4, 5]) 이때 축은 axis0 하나뿐입니다. 이때는 행과 열의 개념이 없습니다. 여기까지는 어렵지 않습니다. 2차원 배열 이번에는 2차원 배열을 정의해봅시다. >>> A2=np.. 2020. 11. 12.
[파이썬 numpy] 두 배열의 원소를 비교하여 최대값 반환 (maximum 함수) [파이썬 numpy] 두 배열의 원소를 비교하여 최대값 반환 (maximum 함수) 넘파이의 maximum 함수는 두 배열의 원소를 비교하여 최대값을 갖는 배열을 반환합니다. 먼저 두 배열을 정의합시다. >>> import numpy as np>>> A=np.array([1,2,3,4,5])>>> B=np.array([5,4,3,2,1]) maximum 함수를 적용해봅시다. >>> np.maximum(A,B)array([5, 4, 3, 4, 5]) 두 배열의 크기가 다를 경우 오류가 발생합니다. 2020. 11. 12.
[파이썬 numpy] 배열의 지수함수 (exponential) [파이썬 numpy] 배열의 지수함수 (exponential) 파이썬 넘파이에서 제공하는 지수함수들입니다. 아래와 같이 세가지가 있습니다. 배열에 적용하여 사용합니다. exp( ) : exponential 값을 구해줌exp2( ) : 배열값으로 2를 거듭제곱해줌expm1( ) : exp(배열값) - 1 배열을 하나 정의하고 각 함수를 적용해봅시다. >>> import numpy as np>>> A=np.array([1,2,3])>>> Aarray([1, 2, 3]) exp >>> np.exp(A)array([ 2.71828183, 7.3890561 , 20.08553692]) exp2 >>> np.exp2(A)array([2., 4., 8.]) expm1 >>> np.expm1(A)array([ 1.71.. 2020. 11. 12.
[파이썬 numpy] 배열의 거듭제곱, 제곱근, 세제곱근 [파이썬 numpy] 배열의 거듭제곱, 제곱근, 세제곱근 배열의 거듭제곱 (**연산자) 배열을 하나 정의합시다. >>> import numpy as np>>> A=np.arange(6).reshape(2,3)>>> A array([[0, 1, 2], [3, 4, 5]]) 거듭제곱을 할 때는 ** 연산자를 사용합니다. **뒤에 원하는 거듭제곱값을 입력하면 됩니다. >>> A**2array([[ 0, 1, 4], [ 9, 16, 25]], dtype=int32) 배열의 제곱근(sqrt 메소드) 배열을 하나 정의합시다. >>> A=np.arange(6).reshape(2,3)>>> A array([[0, 1, 2], [3, 4, 5]]) 제곱근을 구할 때는 넘파이의 sqrt 메소드를 사용합니다. >>> np... 2020. 11. 12.
[파이썬 numpy] 배열의 두 축을 서로 바꾸기 (swapaxes 메소드) [파이썬 numpy] 배열의 두 축을 서로 바꾸기 (swapaxes 메소드) swapaxes 는 정의된 배열에서 두 축을 서로 바꿔줍니다. 오직 두개의 축만 입력할 수 있습니다. 예를들어 4차원 배열이라면, 그 중 축 2개를 골라서 입력해 주어야 합니다. swapaxes 메소드는 T메소드를 포함하고, transpose 메소드에는 포함되는 개념입니다. 집합관계를 나타내면 아래와 같습니다. T메소드 >> A=np.arange(6).reshape(2,3)>>> Aarray([[0, 1, 2], [3, 4, 5]]) swapaxes 를 적용하면 T나 transpose 를 적용한 것과 같은 결과가 나옵니다. >>>.. 2020. 11. 11.
[파이썬 numpy] 배열의 전치를 원하는 방향으로 (transpose 메소드) [파이썬 numpy] 배열의 전치를 원하는 방향으로 (transpose 메소드) transpose 메소드는 T메소드보다 확장된 방법이다. T메소드는 배열의 shape을 역방향으로 바꾸는 것만 할 수 있지만 transpose 메소드는 원하는 방향으로 바꿀 수가 있다. 방향이 정방향과 역방향 둘 뿐인 2차원 배열에서는 T메소드와 transpose 메소드의 결과가 같다. 하지만 3차원 이상에서는 달라질 수 있다. 2차원 배열 shape이 (2,3)인 배열을 하나 정의하자. 2행 3열로 해석할 수도 있다. >>> A=np.arange(6).reshape(2,3)>>> Aarray([[0, 1, 2], [3, 4, 5]]) T메소드를 적용해보자. >>> A.Tarray([[0, 3], [1, 4], [2, 5]].. 2020. 11. 11.
[파이썬 numpy] 원하는 크기의 배열 쉽게 만드는 방법 [파이썬 numpy] 원하는 크기의 배열 쉽게 만드는 방법 배열을 공부할 때 여러 차원의 배열을 정의하며 이래저래 변형해 보고 싶은 경우가 있습니다. 매번 리스트를 이용하여 정의하기가 귀찮은데요. 이럴 때 사용하는 방법입니다. arrange 메소드와 reshape 메소드를 함께 사용해주면 됩니다. 몇가지 예시를 통해 알아봅시다. 2행4열짜리 배열 (shape이 2,4) >>> A=np.arange(8).reshape(2,4)>>> Aarray([[0, 1, 2, 3], [4, 5, 6, 7]]) 3행5열에 높이 2짜리 배열 (shape이 2,3,5) >>> A=np.arange(30).reshape(2,3,5)>>> A: array([[[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [1.. 2020. 11. 11.
[파이썬 numpy] 행렬의 곱셈 하는 법 (dot 메소드) [파이썬 numpy] 행렬의 곱셈 하는 법 (dot 메소드) 파이썬에서 행렬의 곱셈을 할 때는 dot 메소드를 사용합니다. inner 메소드도 행렬의 곱셈이 수행되기는 하나 우리가 알고 있던 행렬의 곱셈과는 결과가 다릅니다. dot 메소드와 inner 메소드의 비교는 다른 글에서 하겠습니다. 이번 글에서는 dot 메소드를 사용하여 행렬의 곱셈을 해봅시다. 두 행렬을 정의합시다. >>> import numpy as np>>> A1=np.array([[1,2,3],[4,5,6]])>>> A2=np.array([[1,2,3],[4,5,6]]) dot 메소드를 적용해봅시다. >>> np.dot(A1,A2)Traceback (most recent call last): File "", line 1, in np.do.. 2020. 11. 10.
[파이썬 numpy] 벡터곱 하는법 (고등학교에서 배운 그 외적, cross 메소드) [파이썬 numpy] 벡터곱 하는법 (고등학교에서 배운 그 외적, cross 메소드) 넘파이에서 벡터곱을 하는 방법을 알아봅시다. 고등학교에서 배운 그 외적이 맞습니다만, 외적이라 불리는 다른 연산이 있어서 혼동을 피하기 위해 벡터곱이라고 불렀습니다. 텐서곱을 의미하는 outer product 도 번역하면 외적입니다. 따라서 외적이라고 부를 경우 둘 중 무엇을 의미하는지 헷갈리기 때문에, 영문명으로 부르던지 아니면 벡터곱과 텐서곱으로 부르는 것이 좋습니다. 앞으로 벡터곱이라고 하면, 여러분이 고등학교에서 사용한 그 외적을 떠올리시면 됩니다. 두 벡터를 정의합시다. >>> import numpy as np>>> V1=np.array([3,0,0])>>> V2=np.array([0,2,0]) 벡터곱을 해봅시.. 2020. 11. 10.
[파이썬 numpy] 외적이 헷갈리는 이유 (cross product, outer product 차이) [파이썬 numpy] 외적이 헷갈리는 이유 (cross product, outer product 차이) 외적이라 불리는 연산은 두가지가 있습니다. 1) cross product (고등학교에서 배운 벡터의 외적, 벡터곱)2) outer product (외적, 텐서곱) 고등학교에서 우리는 1번을 외적이라고 불렀습니다. 하지만 영어 의미를 생각했을 때, 외적이라고 번역되기에는 2번이 더 알맞아 보입니다. 실제로 2번도 외적이라고 불립니다. 여기서 혼동이 발생합니다. 누군가 '외적' 이라고 말하면, 그것이 무엇을 의미하는지 알 수가 없는 것입니다. 고등학교에서 배운 외적은 cross product로 전혀 외적으로 번역될 이유가 없습니다. 그런데 왜 외적으로 불리게 된걸까요? 그 이유는 내적의 반대의미로 불리게 .. 2020. 11. 10.
[파이썬 numpy] 벡터의 내적 (dot 또는 inner 메소드) [파이썬 numpy] 벡터의 내적 (dot 또는 inner 메소드) 벡터의 내적에는 dot 메소드 또는 inner 메소드가 사용됩니다. 벡터의 내적은 dot 연산 또는 스칼라곱이라고도 부릅니다. 벡터의 내적은 내적의 한 종류입니다. 2차 이상의 배열인 행렬부터는 dot 메소드와 inner 메소드의 결과가 다르지만, 1차원 배열인 벡터에서는 결과가 동일합니다. 두 벡터를 정의해봅시다. >>> import numpy as np>>> V1=np.array([1,2,3])>>> V2=np.array([1,2,3]) dot 메소드를 적용해봅시다. >>> np.dot(V1,V2)14 inner 메소드를 적용해봅시다. >>> np.inner(V1,V2)14 2020. 11. 10.
[파이썬 numpy] 배열 전치하는 법 (T 메소드) [파이썬 numpy] 배열 전치하는 법 (T 메소드) 배열을 하나 정의합시다. A=np.array([[1,2,3],[4,5,6]]) 2행 3열인 배열입니다. >>> Aarray([[1, 2, 3], [4, 5, 6]]) 위 배열의 전치배열을 만들 때는 T 메소드를 사용합니다. >>> A.Tarray([[1, 4], [2, 5], [3, 6]]) 고차원 배열에도 적용해봅시다. A2=np.arange(24).reshape(2,3,4) 3행4열짜리 배열이 2층 쌓여있다고 해석할 수 있습니다. >>> A2array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]]) 전치를 .. 2020. 11. 9.
[파이썬 numpy] 배열과 비교연산자 [파이썬 numpy] 배열과 비교연산자 배열과 배열 사이에 비교연산자를 적용해봅시다. 먼저 아래와 같이 두 배열을 정의합시다. >>> A=np.array([1,2,3])>>> B=np.array([4,5,6]) 비교연산자를 적용해봅시다. >>> A>> A>Barray([False, False, False]) >>> A==Barray([ True, True, True]) >>> A>=Barray([ True, True, True]) >>> A 2020. 11. 9.
[파이썬 numpy] 배열과 제곱, 나머지 연산자 [파이썬 numpy] 배열과 제곱, 나머지 연산자 배열과 배열 사이에 제곱과 나머지 연산자를 적용해봅시다. 먼저 아래와 같이 두 배열을 정의합시다. >>> A=np.array([1,2,3])>>> B=np.array([4,5,6]) 제곱과 나머지 연산자를 적용해봅시다. >>> A**Barray([ 1, 32, 729], dtype=int32) >>> A%Barray([1, 2, 3], dtype=int32) 같은 위치에 있는 원소끼리 연산이 수행됩니다. 2020. 11. 9.
[파이썬 numpy] 배열의 사칙연산 [파이썬 numpy] 배열의 사칙연산 배열과 배열 사이에 사칙연산을 적용해봅시다. 먼저 아래와 같이 두 배열을 정의합시다. >>> A=np.array([1,2,3])>>> B=np.array([1,2,3]) 사칙연산을 수행합시다. >>>A+Barray([2, 4, 6]) >>> A-Barray([0, 0, 0]) >>> A*Barray([1, 4, 9]) >>> A/Barray([1., 1., 1.]) 같은 위치에 있는 원소끼리 연산이 수행됩니다. 2020. 11. 9.
[파이썬 numpy] 다른 배열의 데이터타입을 이용하여 데이터타입 정의 [파이썬 numpy] 다른 배열의 데이터타입을 이용하여 데이터타입 정의 데이터 타입이 실수인 배열을 하나 정의합시다. >>> A=np.array([1,2,3],dtype=np.float64)>>> A.dtypedtype('float64') A의 데이터타입을 이용하여 배열 B를 정의합시다. >>> B=np.array([4,5,6],dtype=A.dtype)>>> B.dtypedtype('float64') 2020. 11. 9.
[파이썬 numpy] 배열 데이터타입 변경 (astype메도스) [파이썬 numpy] 배열 데이터타입 변경 (astype메도스) 배열을 하나 정의합시다. >>> A=np.array([1,2,3]) 데이터 타입은 정수형입니다. >>> A.dtypedtype('int32') astype을 이용하여 실수로 변경하고, A2에 저장합시다. >>> A2=A.astype(np.float64)>>> A2array([1., 2., 3.]) 데이터타입이 실수로 변경되어 A2에 저장된 것을 알 수 있습니다. >>> A2.dtypedtype('float64') 2020. 11. 9.
[파이썬 numpy] 난수 배열 생성 (표준정규분포) [파이썬 numpy] 난수 배열 생성 (표준정규분포) 표준정규분포에서 원하는 사이즈의 배열을 생성하는 방법입니다. 넘파이의 random.randn 메소드를 사용합니다. 사용 방법은 아래와 같습니다. np.random.randn(행의수,열의수) 아래는 예시입니다. >>> np.random.randn(1,5)array([[-0.53474255, -0.26824767, 0.40051976, 0.20902571, 0.85302316]]) >>> np.random.rand(5,1)array([[0.09908128], [0.69543208], [0.47818293], [0.29011454], [0.28634044]]) >>> np.random.rand(3,2)array([[0.62751618, 0.35258331].. 2020. 11. 9.
[파이썬 numpy] 난수 배열 생성 (균등분포) [파이썬 numpy] 난수 배열 생성 (균등분포) 0~1사이의 실수값을 갖는 균등분포에서 원하는 사이즈의 배열을 생성하는 방법입니다. 넘파이의 random.rand 메소드를 사용합니다. 사용 방법은 아래와 같습니다. np.random.rand(행의수,열의수) 아래는 예시입니다. >>> np.random.rand(1,5)array([[0.52472279, 0.91808213, 0.24951246, 0.46484689, 0.24740284]]) >>> np.random.rand(5,1)array([[0.61691968], [0.23109204], [0.93270193], [0.00745551], [0.93411614]]) >>> np.random.rand(3,2)array([[0.13940972, 0.487.. 2020. 11. 9.
[파이썬 numpy] 난수 배열 생성 (구간 사이 정수값) [파이썬 numpy] 난수 배열 생성 (구간 사이 정수값) 특정 구간 사이값을 갖는 하나의 정수를 추출하는 방법입니다. 넘파이의 random.randint 메소드를 사용합니다. 사용 방법은 아래와 같습니다. np.random.randint(시작값,끝값+1) 아래는 예시입니다. -5이상, 2이하의 정수 중 하나를 임의로 출력합니다. >>> np.random.randint(-5,3)2 >>> np.random.randint(-5,3)-3 >>> np.random.randint(-5,3)-3 2020. 11. 9.
[파이썬 Pandas] 시리즈(Series) 인덱싱(2) 문자 인덱스 사용 [파이썬 Pandas] 시리즈(Series) 인덱싱 (2) 문자 인덱스 사용 시리즈를 하나 정의합시다. 인덱스도 함께 정의해주겠습니다. A=pd.Series([1,2,3,4],index=['a','b','c','d']) >>> Aa 1b 2c 3d 4dtype: int64 문자로 정의한 인덱스를 이용하여 인덱싱을 하는 방법은 아래와 같습니다. 'a' 를 인덱스로 하는 원소에 접근해봅시다. >>> A['a']1 아래와 같이 리스트를 이용하여 인덱싱하면 시리즈 형태로 출력됩니다. >>> A[['a']]a 1dtype: int64 여러 원소에 접근도 가능합니다. >>> A[['a','c']]a 1c 3dtype: int64 2020. 10. 22.
[파이썬 Pandas] 시리즈(Series) 인덱싱 (1) 숫자 인덱스 사용 [파이썬 Pandas] 시리즈(Series) 인덱싱 (1) 숫자 인덱스 사용 시리즈의 인덱싱과 수정방법을 알아봅시다.인덱싱은 특정 원소(들)에 접근하는 것입니다. 특정원소에 접근하면 그 값을 다른 값으로 바꿀 수 있기 때문에 원소의 수정도 함께 배울 것입니다. 먼저 시리즈를 하나 정의합시다. >>> A=pd.Series([1,2,3,4])>>> A0 11 22 33 4dtype: int64 하나의 원소에 접근 시리즈 A의 첫번째 원소에 접근해보겠습니다. 대괄호를 사용합니다. >>> A[0]1 구간을 이용하여 여러 원소에 접근 구간을 이용할 때는 콜론 : 을 사용합니다. 첫번째와 두번째 원소에 접근할 때는 어떻게 해야할까요? 아마 A[0:1]가 떠오르실 것입니다. 아쉽게도 결과는 아래와 같습니다. 첫번째 .. 2020. 10. 21.
[파이썬 numpy] 배열 요소 삭제하기 [파이썬 numpy] 배열 요소 삭제하기 배열 요소를 삭제할 때는 np.delete 메소드를 사용합니다. 아아래와 같은 형식으로 사용합니다. np.delete(배열, 인덱스, axis) 1차원 배열에서 요소 삭제 1차원배열을 정의하고, 첫번째 요소를 삭제해봅시다. A=np.array([1,2,3,4,5]) >>> Aarray([1, 2, 3, 4, 5]) >>> np.delete(A, 0)Out[450]: array([2, 3, 4, 5]) 2차원 배열에서 행 삭제 2차원배열을 정의하고 1행을 삭제해봅시다. 2차원배열에서 행방향으로 첫번째 행을 제거하는 것이므로 axis 에 0을 넣어줍니다. A2=np.array([[1,2,3],[4,5,6]]) >>> A2array([[1, 2, 3], [4, 5, 6.. 2020. 10. 21.
파이썬 numpy의 array(배열)에 관한 의문 파이썬 numpy의 array(배열)에 관한 의문 numpy의 배열에 대한 의문은 아래 배열에서 시작되었다. >>> A=np.array([1,2,[3,4],5])>>> Aarray([1, 2, list([3, 4]), 5], dtype=object) 이게 왜 정의가 되지? 라는 의문이었다. 내가 알던 배열은 벡터, 행렬, ... 로 확장되는 개념이 아니었던가? 저건 뭐지? 라는 의문이었다. 한동안 고민했다. 내가 알던 배열에서 더 확장된 개념이 존재하는 것인가라는... A를 두번 더해봤다. >>>A+Aarray([2, 4, list([3, 4, 3, 4]), 10], dtype=object) 리스트는 그대로 리스트 연산이 적용된다. 이건뭐지? 이 요소는 뭐라고 불러야 하지? R과 매트랩에도 배열이 있어서.. 2020. 10. 21.
[파이썬 Pandas] 딕셔너리로 시리즈(Series) 정의하기 [파이썬 Pandas] 딕셔너리로 시리즈(Series) 정의하기 딕셔너리를 이용하여 시리즈를 정의하는 방법은 아래와 같습니다. dic = {'list':[1,2,3], 'num':123456, "char": 'hi'}B=pd.Series(dic) >>> Blist [1, 2, 3]num 123456char hidtype: object 2020. 10. 21.
[파이썬 Pandas] 시리즈(Series) 인덱스에 원하는 이름 부여하기 [파이썬 Pandas] 시리즈(Series) 인덱스에 원하는 이름 부여하기 시리즈는 R의 벡터처럼 인덱스에 원하는 이름을 부여할 수 있습니다. 아래와 같은 방법으로 이름을 부여합니다. 인덱스에 이름을 부여할 때도 리스트 자료구조를 사용합니다. import pandas as pd A1=pd.Series([1,2,3,4], index=['a','b','c','d']) >>> A1a 1b 2c 3d 4dtype: int64 하나의 문자가 아니라 여러개의 문자로도 가능할까요? 가능합니다. A2=pd.Series([1,2,3,4], index=['hi','b','c','d']) >>> A2hi 1b 2c 3d 4dtype: int64 띄어쓰기가 있는 문장으로도 가능할까요? 가능합니다. A3=pd.Series([1.. 2020. 10. 21.
[파이썬 Pandas] 시리즈(Series) 소개, 정의 [파이썬 Pandas] 시리즈(Series) 소개, 정의 시리즈는 1차원 배열과 비슷한 자료구조입니다. 딕셔너리와도 비슷합니다. 시리즈는 1열로만 이루어진 자료구조인데 두가지 특징을 가집니다. - 열의 이름을 지정할 수 있음- 각 셀에는 서로 다른 모든 자료형을 넣을 수 있고, 다차원 배열도 넣을 수 있음 직접 사용해보며 이해해봅시다. 먼저 판다스 라이브러리를 불러옵시다. pd라는 이름으로 불러오는 것이 일반적입니다. numpy도 사용할 것이라 함께 불러옵시다. np라는 이름으로 불러오는 것이 일반적입니다. import pandas as pdimport numpy as np 이제 시리즈를 정의합시다. pd.Series( ) 라는 메소드를 사용합니다. 괄호 안에 리스트를 넣어도 되고, 넘파이 배열을 넣어도.. 2020. 10. 21.
[파이썬 numpy] numpy 소개 [파이썬 numpy] numpy 소개 numpy는 그 이름에서도 느낄 수 있듯이 수학과 관련되어 있다. numpy의 num은 numeric 을 뜻한다. numeric은 '수' 다. numpy는 크게 두 가지를 제공한다. 1) 배열2) 배열 계산(수학함수) 배열이란 말이 생소하신 분들은 벡터와 행렬을 생각하시면 된다. 1차원 배열이 벡터이고, 2차원 배열이 행렬이다. 3차원배열은 행렬이 여러 층 쌓여있는 것이다. 4차원 배열은 3차원 배열이 두개의 평행우주에 존재하는 것이고...5차원을 넘어가면 직관적으로 받아들이기 힘든 것 같다. 배열에 적용되는 수학함수들은 간단한 계산부터 시작해서, 선형대수, 수치 미적분도 제공한다. numpy의 핵심은 배열이다. numpy의 배열은 다른 패키지들에서도 연동되어 사용된.. 2020. 10. 20.
반응형