[TIL] Python numpy, tensorflow, pytorch array
array : data type = homogeneous / sequence data type. 같은 종류의 순서가 있는 데이터. 프로그래밍 용어 => indexing, slicing, sequence operatoration 가능함
sequence operatoration?
x = [1, 2, 3]
x + x
>> [1, 2, 3, 1, 2, 3]
'abc' + 'bcd'
>> 'abcbcd'
3*'abc'
>> 'abcabcabc'
Tensorflow에서 Operator overloading ?
원래 array + array = 뒤에서 붙어주는 연산인데 tensorflow에서는 vectorization으로 지원해줌
vectorization연산? elementwise방식으로 loop 없이 동시에 여러번 연산을 하는 연산
tensorflow, pytorch, mxnet는 numpy 기반으로 array를 만들었음. 다만 numpy는 CPU, tensorflow는 GPU로 연산을 함.
matrix : 수학, 물리적 용어
1차 : vector
2차 : matrix
3차 이상 : tensor
python array 와 numpy array의 차이
import numpy as np
a = np.array([1, 2., '3'])
>> array(['1', '2.0', '3'], dtype='<U32')
array data 구조이기 때문에 자동으로 문자 구조로 바꿔줌.
import tensorflow as tf
b = tf.constant([1, 2., '3'])
>> ValueError
numpy에서는 자동적으로 가장 큰 데이터 타입으로 바꿔주만 tensorflow에서는 sequence로 바꿔줄 수가 없어서 ValueError가 발생.
cf. pytorch에서도 마찬가지로 에러가 발생함
homogeneous의 장점 : 더 빠른 연산이 가능함. data type이 무엇인지 계산할 필요가 없음
coercion : python에서는 int 연산과 float 연산을 묵시적으로 해줌. 같은 데이터 타입으로 볼 때가 있지만 array에서는 아주 엄격하게 관리를 함.
선형대수를 프로그래밍 관점에서 구현해 놓은 게 array.
cf. ndarray랑 array랑 차이점
ndarray : numpy의 class 이름
class를 바로 만들기 어려우니까, foctory method를 제공함으로써 np.array를 통해서 쉽게 데이터를 만들어줌
ndarray : n-dimentional array 라고 하는 경우도 있음
glossary 관점에서 통칭으로 2차원 이상의 array라고 하는 경우도 많음
indexing
indexing : 여러개 데이터 중 하나만 가지고 오는 것
slicing : 여러개의 데이터를 가지고 오는 것, 대신 slicing 에러는 없음
a = np.arange(6).reshape(2, 3)
>> array([[0, 1, 2],[3, 4, 5]])
b = np.arange(24).reshape(2, 3, 4)
>> array([[[0, 1, 2, 3],
[4, 5, 6, 8],
[8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
numpy 기반에 indexing 기법
1. , indexing : b[:, : , 0]
2. boolean indexing : True만 뽑는 것. filter 기법. a[a > 3]
3. fancy indexing : 재조합하여 만들 수 있음 a[[1, 0]], a[[0, 1], [1, 2]]
4. ellipsis : 1개 이상의 콜론(:)을 대체.
a[0, ...] == a[0] == a[0, :], a[:,:] == a[...]
id(a) =! id(a[:, :]) =! id(a[...])
ellipsis가 필요한 이유
array는 homegeneous한 sequence type
numpy : mutable, CPU
tensorflow : immutable, GPU
mutable일 이기 때문에 memory를 공유함.
mutable일 때 문제점 : deep copy가 안 됨
a = [1, 2, 3]
b = a
b[0] = 100
a[0]
>> 100
c = [1, 2, 3]
d = c[:]
d[0] = 100
c[0]
>> 1
e = [[1, 2, 3], [4, 5, 6]]
f = e[:]
f[0][0] = 100
e[0][0]
>> 100
import copy
e = [[1, 2, 3], [4, 5, 6]]
f = copy.deepcopy(e)
f[0][0] = 100
e[0][0]
>> 1
numpy의 copy는 deepcopy가 됨
import numpy as np
e = np.array([[1, 2, 3], [4, 5, 6]])
f = e.copy()
f[0][0] = 100
e[0][0]
>> 1
e = np.array([[1, 2, 3], [4, 5, 6]])
f = e[...]
f[0][0] = 100
e[0][0]
>> 100
e = np.array([1, 2, 3])
f = e[:]
f[0] = 100
e[0]
>> 100
Author And Source
이 문제에 관하여([TIL] Python numpy, tensorflow, pytorch array), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@vivilsh1226/Python-numpy-tensorflow-pytorch-array저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)