=[1,2]
a=[3,4]
b+b a
[1, 2, 3, 4]
최규빈
April 5, 2023
youtube: https://youtube.com/playlist?list=PLQqh36zP38-yzovneTfJptA4K705FOG1f
-
현재 파이썬은 길이가 2인 벡터의 덧셈을 지원하지 않음
-
아래와 같은 기능을 구현하는 함수를 만들고 싶음
[1,2], [3,4] -> [4,6]
-
구현
-
test
myfuns.py
-
생각해보니까 vec2_add는 내가 앞으로 자주 쓸 기능임
-
그런데 현재 사용방법으로는 내가 노트북파일을 새로 만들때마다 def vec2_add(a,b):
와 같은 형태로 vec2_add를 매번 정의해줘야 하는 불편한이 있다.
-
자주 사용하는 함수를 myfuns.py
에 저장한다.
-
%run myfuns를 실행
준비: “00” -> 커널재시작
-
자주 사용하는 함수를 myfuns.py
에 저장한다.
-
import myfuns를 이용
(준비) “00” -> 커널재시작
-
사용방법1
준비: “00” -> 커널재시작
.
의 의미: 상위.하위
의 개념!(주의) 아래와 같이 사용불가능 하다.
-
사용방법2
준비: “00” -> 커널재시작
(주의) 이 경우는 오히려 아래가 불가능함
NameError: name 'myfuns' is not defined
-
사용방법3
준비: “00” -> 커널재시작
-
사용방법4
준비: “00” -> 커널재시작
-
사용방법5
준비: “00” -> 커널재시작
-
사용방법6
준비: “00” -> 커널재시작
(오히려 아래는 실행불가능)
-
잘못된 사용방법1
준비: “00” -> 커널재시작
-
사용방법7
준비: “00” -> 커널재시작
-
사용방법8
준비: “00” -> 커널재시작
-
mf란 무엇인가?
준비: “00” -> 커널재시작
Type: module String form: <module 'myfuns' from '/home/cgb3/Dropbox/07_lectures/IP2022/_notebooks/myfuns.py'> File: ~/Dropbox/07_lectures/IP2022/_notebooks/myfuns.py Docstring: <no docstring>
-
Docstring의 내용을 채울 수 있을까?
준비1: myfuns.py 파일을 아래와 같이 수정한다.
준비2: “00” -> 커널재시작
-
myfuns.py
는 최초 한번만 import 된다.
준비: “00” -> 커널재시작
myfuns.py
파일을 열고 함수를 아래와 같이 바꾸자.
"""이것은 길이가 2인 벡터의 합 혹은 차를 구하는 모듈입니다."""
def vec2_add(a,b):
print("이것은 myfuns.py에 정의된 함수입니다")
return [a[0]+b[0], a[1]+b[1]]
def vec2_sub(a,b):
return [a[0]-b[0], a[1]-b[1]]
다시 myfuns를 로드하고 myfuns.vec2_add 를 실행하여 보자.
바뀐내용이 적용되지 않는다.
커널을 다시 시작하고 임포트해보자.
“00” -> 커널재시작
-
myfuns.py
는 주피터노트북파일과 같은 폴더에 존재해야 한다.
준비1: “00” -> 커널재시작
준비2: myfuns.py
을 복사하여 다른 폴더로 이동. 예를들면 IP0403 폴더를 만들고 그 폴더안에 myfuns.py파일을 복사해서 붙여넣은뒤에 파일이름을 myfuns2.py 로 변경.
ModuleNotFoundError: No module named 'myfuns2'
-
IP0403 폴더에 있는 myfuns2.py를 실행하기 위해서는 아래와 같이 할 수 있다.
준비: “00” -> 커널재시작
-
아래도 가능하다.
준비: “00” -> 커널재시작
참고로 아래는 모두 정의되지 않음
-
언뜻 생각하면 아래가 가능할 것 같다.
-
하지만 불가능하다.
준비: “00” -> 커널재시작
-
(암기) IP0403 폴더안에 __init__.py
라는 파일을 만들고 내용에 아래와 같이 쓰면 가능하다.
준비1: 위의 지침을 따른다.
준비2: “00” -> 커널재시작
컴퓨터 상식 - .
: 현재폴더를 의미 - ..
: 상위폴더를 의미 - ./myfuns.py
: 현재폴더안에 있는 myfuns.py를 의미 - ./IP0403/myfuns2.py
: 현재폴더만에 IP0403폴더안의 myfuns2.py 파일을 의미 - ../myfuns.py
: 현재폴더보다 한단계상위폴더에 있는 myfuns.py를 의미 - cd ./IP0403
: 현재폴더안에 있는 IP0403폴더로 이동해라. (cd IP0403
으로 줄여쓸 수 있음) - cd ..
현재폴더보다 한단계 상위폴더로 이동하라.
따라서 from . import myfuns2
는 현재폴더에서 myfuns2를 찾아서 임포트 하라는 의미로 해석가능
-
의미상으로 보면 아래가 실행가능할듯 한데 불가능하다.
-
의문: 왜 현재폴더에 numpy.py라든가 numpy라는 이름의 폴더가 없는데도 import 가능한지?
준비: “00” -> 커널재시작
Type: module String form: <module 'IP0403' from '/home/cgb3/Dropbox/07_lectures/IP2022/_notebooks/IP0403/__init__.py'> File: ~/Dropbox/07_lectures/IP2022/_notebooks/IP0403/__init__.py Docstring: <no docstring>
Type: module String form: <module 'numpy' from '/home/cgb3/anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.py'> File: ~/anaconda3/envs/py310/lib/python3.10/site-packages/numpy/__init__.py Docstring: NumPy ===== Provides 1. An array object of arbitrary homogeneous items 2. Fast mathematical operations over arrays 3. Linear Algebra, Fourier Transforms, Random Number Generation How to use the documentation ---------------------------- Documentation is available in two forms: docstrings provided with the code, and a loose standing reference guide, available from `the NumPy homepage <https://www.scipy.org>`_. We recommend exploring the docstrings using `IPython <https://ipython.org>`_, an advanced Python shell with TAB-completion and introspection capabilities. See below for further instructions. The docstring examples assume that `numpy` has been imported as `np`:: >>> import numpy as np Code snippets are indicated by three greater-than signs:: >>> x = 42 >>> x = x + 1 Use the built-in ``help`` function to view a function's docstring:: >>> help(np.sort) ... # doctest: +SKIP For some objects, ``np.info(obj)`` may provide additional help. This is particularly true if you see the line "Help on ufunc object:" at the top of the help() page. Ufuncs are implemented in C, not Python, for speed. The native Python help() does not know how to view their help, but our np.info() function does. To search for documents containing a keyword, do:: >>> np.lookfor('keyword') ... # doctest: +SKIP General-purpose documents like a glossary and help on the basic concepts of numpy are available under the ``doc`` sub-module:: >>> from numpy import doc >>> help(doc) ... # doctest: +SKIP Available subpackages --------------------- doc Topical documentation on broadcasting, indexing, etc. lib Basic functions used by several sub-packages. random Core Random Tools linalg Core Linear Algebra Tools fft Core FFT routines polynomial Polynomial tools testing NumPy testing tools f2py Fortran to Python Interface Generator. distutils Enhancements to distutils with support for Fortran compilers support and more. Utilities --------- test Run numpy unittests show_config Show numpy build configuration dual Overwrite certain functions with high-performance SciPy tools. Note: `numpy.dual` is deprecated. Use the functions from NumPy or Scipy directly instead of importing them from `numpy.dual`. matlib Make everything matrices. __version__ NumPy version string Viewing documentation using IPython ----------------------------------- Start IPython with the NumPy profile (``ipython -p numpy``), which will import `numpy` under the alias `np`. Then, use the ``cpaste`` command to paste examples into the shell. To see which functions are available in `numpy`, type ``np.<TAB>`` (where ``<TAB>`` refers to the TAB key), or use ``np.*cos*?<ENTER>`` (where ``<ENTER>`` refers to the ENTER key) to narrow down the list. To view the docstring for a function, use ``np.cos?<ENTER>`` (to view the docstring) and ``np.cos??<ENTER>`` (to view the source code). Copies vs. in-place operation ----------------------------- Most of the functions in `numpy` return a copy of the array argument (e.g., `np.sort`). In-place versions of these functions are often available as array methods, i.e. ``x = np.array([1,2,3]); x.sort()``. Exceptions to this rule are documented.
-
추측: ~/anaconda3/envs/py310/lib/python3.10/site-packages/
를 찾아가보자. 그곳에 numpy폴더가 있을 것이다.
-
추측2: ~/anaconda3/envs/py310/lib/python3.10/site-packages/
에 내가 자주 쓰는 기능을 폴더로 만들어서 모아두면 어디서든지 import 할 수 있다.
Type: module String form: <module 'guebin.myfuns' from '/home/cgb3/anaconda3/envs/py310/lib/python3.10/site-packages/guebin/myfuns.py'> File: ~/anaconda3/envs/py310/lib/python3.10/site-packages/guebin/myfuns.py Docstring: 이것은 길이가 2인 벡터의 합 혹은 차를 구하는 모듈입니다.
-
추측3: guebin이 사라진 상태에서는 from guebin import myfuns
이 동작하지 않을 것이다.
준비: “00” -> 커널재시작
-
추측4: ~/anaconda3/envs/py310/lib/python3.10/site-packages/
에서 numpy를 지운다면 numpy를 import할 수 없다.
준비: “00” -> 커널재시작
-
추측5: !pip install numpy
를 하면 다시 폴더가 생길 것이다.
Found existing installation: numpy 1.22.2
Uninstalling numpy-1.22.2:
Successfully uninstalled numpy-1.22.2
-
모듈의 개념은 아까 살펴본것과 같다. (import를 하여 생기게 되는 오브젝트)
-
교수님들: 모듈이 모이면 패키지라고 부른다. 그리고 라이브러리는 패키지보다 큰 개념이다.
-
그런데 구분이 모호하다.
-
python에서의 numpy의 type은 모듈
-
그런데 numpy package 라고 검색하면 검색이 된다.
-
심지어 numpy library 라고 해도 검색가능
-
내생각: 넘파이모듈, 넘파이패키지, 넘파이라이브러리 다 맞는 말임