넘파이,NumPy

Difference between r1.11 and the current

@@ -1,122 +1,7 @@
https://numpy.org/
----
<<tableofcontents>>
= 기본, tmp. 나중에 제대로 rewrite =
이하
* v. 는 벡터/행렬에 대한?
* np. 는 (당연)

== np.arange ==
Return evenly spaced values within a given interval https://numpy.org/doc/stable/reference/generated/numpy.arange.html
ex.
{{{
> print(np.arange(6))
[0 1 2 3 4 5]
> print(np.arange(6) + 1)
[1 2 3 4 5 6]
}}}
== v.dtype ==
{{{
> v.dtype # v의 타입은 무엇인가?
dtype('int32')
}}}
... Google:numpy+dtype
== v.reshape ==
{{{
>>> v = np.arange(24) + 1
>>> v.reshape(4, 2, 3)
array([[[ 1, 2, 3],
[ 4, 5, 6]],
[[ 7, 8, 9],
[10, 11, 12]],
[[13, 14, 15],
[16, 17, 18]],
[[19, 20, 21],
[22, 23, 24]]])
}}}
이것의 반대는 flatten.
== v.flatten ==
바로 위 v.reshape 한 것에 대해,
{{{
>>> v.flatten()
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24])
}}}
== v.ravel ==
저 위 v.reshape 한 것에 대해,
{{{
>>> v.ravel()
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24])
}}}
flatten과 똑같이 보이지만... 메모리에 있는 내용을 share하는지 여부가 다르다. 아래 np.may_share_memory 참조.
== np.may_share_memory ==
{{{
>>> np.may_share_memory(v, v.flatten())
False
>>> np.may_share_memory(v, v.ravel())
True
}}}
== 입력 1 - np.array ==
전체를 bracket으로 묶어줘야 오류가 나지 않는다.
{{{
>>> X = np.array([1,2],[3,4])
Traceback (most recent call last):
File "<pyshell#31>", line 1, in <module>
X = np.array([1,2],[3,4])
TypeError: Field elements must be 2- or 3-tuples, got '3'
>>> X = np.array([[1,2],[3,4]])
>>> print(X)
[[1 2]
[3 4]]
>>>
}}}
== 입력 2 - concatenative하게. ==
{{{
>>> X = np.arange(1,10).reshape(3,3)
>>> print(X)
[[1 2 3]
[4 5 6]
[7 8 9]]
>>>
}}}
== 전치 ==
[[전치,transpose]] [[전치행렬,transpose_matrix]]
{{{
v.T
}}}
== np.eye - 항등행렬 ==
[[단위행렬,unit_matrix]] [[항등행렬,identity_matrix]]
np.eye(차원, dtype='타입')
타입 생략하면 TBW ... Google:np.eye
ex.
{{{
>>> I1 = np.eye(3, dtype='int')
>>> I1
array([[1, 0, 0],
[0, 1, 0],
[0, 0, 1]])
>>> I2 = np.eye(3, dtype='float')
>>> I2
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
}}}
== np.ones - 1로만 구성된 행렬 ==
np.eye와 마찬가지로 차원과 타입 지정.
{{{
>>> Z1 = np.ones((2, 3)); print(Z1)
[[1. 1. 1.]
[1. 1. 1.]]
>>> Z2 = np.ones((2, 3), dtype='uint8'); print(Z2)
[[1 1 1]
[1 1 1]]
}}}
== cont .. ==
http://www.kmooc.kr/courses/course-v1:DAUk+DAUk10+2022_T1/courseware/c25aef4992ba41deb124f94e2525c8e4/84e262278b314da69eb051014f3915ff/?child=first 6min

= ? =
''from https://wikidocs.net/22849''
@@ -239,10 +124,8 @@
A Visual Programming Environment for Scientific Computing
Free open source software designed for students, content creators, and professional mathematicians

= Sources =
http://www.kmooc.kr/courses/course-v1:DAUk+DAUk10+2022_T1 9-1. 텐서와 파이썬 I
[[RR:파이,NumPy]]

----
Up: [[파이썬,Python]]







1. ?

from https://wikidocs.net/22849
{
np.array
a = [1,2,3,4,5]   # list a를 만들어서
b = np.array(a)   # array 자료형으로 바꾸자
# 여기서 type(b) 하면 numpy.ndarray 라고 나온다. nd는 다차원(n-dimensional)을 뜻함.
np.sqrt, multiply(내적), max, min, argmax, argmin(최대값 최소값의 index)
np.random.randint(9)는 0부터 9까지 숫자중 아무 숫자나 하나 생성
np.random.randint(숫자1, 숫자2, size = 난수갯수)
}


tmp
{
numpy의 histogram 으로 도수분포도 그리기 (+matplotlib사용)
https://wikidocs.net/23258
}

2. NumPy Types?

2.1. ndarray

a가 있을 때
a.shape : 크기 (x, y)를 돌려줌.
a.reshape(x, y) : 크기 x, y로 바꿈.

np.zeros(n) : 0.으로만 이뤄진 배열을 만듦
np.ones(n) : 1.로만
다차원 배열일때는
np.zeros((행 갯수, 열 갯수)) 처럼 괄호를 두번 써야 함

원소의 index를 찾으려면 (list처럼 .index()가 아님)
np.where('찾으려는 원소' == array이름)

np.sum(a) : 합
np.arange(n) : 수열을 만듦. array형으로.

3. tmp; from Simplenote

// 2018-10-04 작성인데 뭐 하다가 적은건지 기억이 안나네
import numpy as np

배열 만들기
x = np.array([1, 2.0, 3.0])

다차원 배열 만들기 (2차원 배열: 행렬)
>>> a=np.array([[1,2],[3,4]])
>>> print(a)
[[1 2]
 [3 4]]
>>> a.shape
(2, 2)
>>> a.dtype #원소의 자료형
dtype('int32')
>>> b=np.array([[3,0],[0,6]])
>>> a+b
array([[ 4,  2],
       [ 3, 10]])
>>> a*b
array([[ 3,  0],
       [ 0, 24]])

원소 접근
>>> x=np.array([[51,55],[14,19],[0,4]])
>>> print(x)
[[51 55]
 [14 19]
 [ 0  4]]
>>> x[0]
array([51, 55])
>>> x[0][1]
55
>>> for row in x: print(row);

[51 55]
[14 19]
[0 4]
>>> z = x.flatten()
>>> print(z)
[51 55 14 19  0  4]
>>> z[np.array([0,2,4])]  # 인덱스가 0,2,4인 원소 얻기
array([51, 14,  0])

>>> x>15
array([[ True,  True],
       [False,  True],
       [False, False]])
>>> z>15
array([ True,  True, False,  True, False, False])
>>> z[z>15] # 15 초과인 값만 구하기
array([51, 55, 19])

행렬의 내적
>>> A = np.array([[1, 2], [3, 4]])
>>> A.shape
(2, 2)
>>> B = np.array([[5, 6], [7, 8]])
>>> np.dot(A, B)
array([[19, 22],
       [43, 50]])

4. NumPy의 간단한 통계 기능들

from https://wikidocs.net/23279
{
평균,mean,average np.average(x)
중앙값,median - curr see 대표값,평균값,중앙값,최빈값 np.median(x)
최빈값 np.bincount(x).argmax()
분산,variance np.var(x)
표준편차,standard_deviation np.std(x)
}
본격적인 통계 기능은 보통 팬더스,Pandas를 사용.

5. 기타

MathInspector
https://mathinspector.com/
A Visual Programming Environment for Scientific Computing
Free open source software designed for students, content creators, and professional mathematicians