3. 두 번째 실험 : 송신


  이번에는 파이썬에서 값을 송신하면 그에 따라서 아두이노의 LED를 점멸시키는 예제를 해 보겠다. 파이썬에서 데이터를 쓰는 함수로 Serial.write() 함수가 있는데 전송할 바이트 데이터를 리스트나 튜플로 묶어서 넘겨주면 된다. 반환값은 전송한 데이터의 바이트 수이다. 예를 들면 다음과 같다.


-------------------------------------------------------------------------

>>> ard.write( [0] ) # 0이라는 데이터를 전송한다.

>>> ard.write( [10, 150, 255] ) # 10,150,255를 차례로 전송한다.

>>> ard.write( 123 ) # 예외 발생!

-------------------------------------------------------------------------


전송되는 데이터는 바이트 데이터이므로 0~255 사이의 정수여야 하며 마지막 예와 같이 리스트나 튜플이 아니라면 예외가 발생함을 유의하여야 한다.


만약 문자열을 한꺼번에 전송하고 싶다면 encode() 라는 문자열 내장 함수를 이용하면 된다. 이 함수는 파이썬 문자열을 아스키값의 bytes 배열로 변환시켜준다.


-------------------------------------------------------------------------

>>> ard.write( 'Hello arduino.\r\n'.encode() )

-------------------------------------------------------------------------


이 명령은 'H' 부터 맨 마지막 '\n' 까지 14개의 문자의 아스키코드를 차례로 전송한다.


이제 실험을 위해서 아두이노에 다음과 같은 프로그램을 작성하여 다운로드 했다.



아두이노 프로그램 : 전원이 켜지면(또는 리셋 버튼을 누르면) "Hello python." 이라는 문자열을 보낸다. 그리고 데이터가 들어오면 0값이면 LED를 끄고 아니라면 켠다.

-------------------------------------------------------------------------

void setup() {

Serial.begin(9600);

Serial.println("Hello python.");

pinMode(LED_BUILTIN, OUTPUT);

}


void loop() {

if( Serial.available() )

digitalWrite(LED_BUILTIN, Serial.read());

}

-------------------------------------------------------------------------


이제 ard.write([0]) 이라고 명령을 내리면 LED가 꺼지고 ard.write([1])이라고 하면 LED가 켜지는 것을 다음과 같이 확인할 수 있다. 




위 동영상을 보면 1을 쓰면 LED가 켜지고 0을 쓰면 꺼지는 것을 볼 수 있다.


Posted by 살레시오
,

micropython 코어를 이용한 wipy 라는 IoT 보드가 킥스타터에서 자금을 모으고 있다.



내세우고 있는 특징들은 다음과 같다.


  • 저가, 소형, 빵판에 장착 가능
  • 초저전력 소모 (와이파이 연결해도 850uA )
  • 100% 파이썬 프로그래밍 
  • 충분히 많은 GPIOs, 인터페이스, 주변기기
  • 고성능  CPU와 최신 WiFi radio.


이 기기의 최대 특징은 와이파이와 결합된 파이썬 보드라는 것이다. micropython의 펌웨어를 이용하여 파이썬 3.4를 지원한다. 그리고 와이파이로 무선 프로그래밍이 가능하다는 것이다. 다음과 같이 텔넷 연결도 가능하다.



보면 알겠지만 일반적인 파이썬쉘로 접속이 가능하므로 그때그때 프로그램의 동작을 확인해 볼 수 있다.


  물론 전문적인 시스템 개발자들은 앞으로도 한동안 여전히 C/C++을 이용해야 할 것이다. 하지만 이런 보드들이 좀 더 늘어나면 하드웨어 프로그래밍을 하는데 굳이 C/C++을 배우지 않고 파이썬만으로도 할 수 있는 환경이 마련되어 일반 사용자들에게 충분히 어필을 할 수 있을 것 같다.

[#00097]


Posted by 살레시오
,

 아두이노를 사용해서 프로토타잎을 만들어 실험을 하다 보면 빵판에 와이어링(wiring)을 하게 되어 있는데 회로가 조금만 복잡해져도 선이 얽히게 되어 무척이나 불편하다. 처음에는 간단한 방법으로 시제품을 만들 수 있다는 점이 신기하고 편리하게 생각되지만 이게 반복되다 보면 무척이나 번거로운 작업이 되어 버린다.


와이어링 미로 (wiring maze)


이런 단점과 학습의 편이성을 높이기 위한 방편으로 seeed 라는 회사에서 판매하고 있는 grove 시스템이라는 것이 있다. 이 모듈들은 주변 기기와의 인터페이스를 3핀이나 4핀으로 통일하는 시도를 하고 있다.

Newbundle1.jpg

상단 중앙에 있는 것이 아두이노 그로브 쉴드이고 이것을 아두이노에 끼우면 3핀이나 4핀 인터페이스로 되어 있는 모듈들을 쉽게 연결할 수 있다. 자세히 보면 모두 4핀으로만 구성된 것을 알 수 있다. 모듈은 디지털핀, 아날로그핀. 혹은 I2C, 시리얼 통신으로 제어할 수 있다. 모듈의 종류도 100가지가 넘어서 웬만한 기초적인 장치들은 다 갖추어져 있는 것 같다. 버튼이나 LED모듈과 같이 간단한 것은 디지털핀 하나와 매핑이 되어 있지만 LCD모듈과 같은 것은 시리얼통신으로 연결하여 제공되는라이브러리를 이용하여 간편하게 제어하는 식이다. 이것을 이용하면 물론 자작하는 재미는 줄어들겠지만 지저분한 점퍼선으로부터 벗어날 수 있다.


 라즈베리파이의 GPIO핀에 연결해서 사용할 수 있는 GrovePi 라는 것도 있다. GrovePi는 이러한 grove 모듈들을 라즈베리파이에서 연결해 제어할 수 있도록 하는 인터페이스 보드이다.



가장 큰 장점은 파이에서 파이썬 스크립트로 간편하게 모듈들을 제어할 수 있다는 점이다. 아마도 파이와 GrovePi 간에 I2C 통신이나 시리얼 통신으로 제어 신호를 주고 받는 식으로 되어있지 않을까 짐직이 든다.




Posted by 살레시오
,

  라즈베리파이(RPi)에서 수치 해석툴을 적용하려고 scilab 과 octave의 장점을 검색해 보았더니 둘 다 장점이 비슷한 것 같다. 어떤 논문에서는 octave를 최고로 언급하기도 한다.


"요약하면, Octave가 가장 지속 가능한 Matlab의 대안이라고 결론을 내렸다. 그 이유는 테스트 결과 (문법적인 측면에서) Matlab과 완전히 호환되며 성능 또한 상당히 좋기 때문이다"


"In summary, we conclude that Octave is the best viable alternative to Matlab because it was not only fully compatible (in terms of syntax) with Matlab in our tests, but it also performed very well."



 그런데 수치해석 툭들을 검색 하는 중에 의외의 대안이 눈에 띄었다. 바로


  • python + numpi / scipy + matplotlib


이다. 어떤 교수가 이렇게 언급해 놓았다.


Francesca Mazzia · Università degli Studi di Bari Aldo Moro


"내 수업(이탈리아 Bari 대학교)에서  Octave, Scilab, R 을 모두 사용해 보았다지만 지금은 파이썬의 넘파이(numpy)와 사이파이(scipy)를 사용한다. 과학 계산에서 pythonxy(윈도우)와 spyder(리눅스)는 훌륭한 통합개발환경이다. 나는 내 포트란 90 코드와의 인터페이스를 개바랬는데 Matlab보다 훨씬 더 쉬었다. 아직도 연구를 위해서 Matlab을 사용하기는 하지만 파이썬은 훌륭한 대안이다. 내 학생들도 좋아한다..." 2013년 1월 31일


"I used in my courses (University of Bari, Italy), Octave, Scilab and R, but now I'm using Python, with numpy and scipy. Pythonxy in Windows and spyder for Linux are good ide for scientific computing. I developed some Python interface for my FORTRAN 90 codes and was easier than in matlab. I still use Matlab for research, but I think Python is a good alternative, my students like it ...." Jan 31, 2013


  이후에 관심이 생겨서 더 조사해 보았는데 python이 과학계산 분야에서 의외로 광범위하게 사용되고 있음을 알게 되었다. Matlab은 앞으로는 어떻게 될 지 모르겠지만(뭐 윈도우도 무료가 되느니 마느니 하는 시대인데) 아직은 고가라 학부 수업에서 사용하기에는 부적합하다.


 개인적으로 scilab은 익히는데 상당히 시간이 많이 걸렸다. (한마디로 제대로 사용하려면 어렵다.) 하지만 python은 그 특유의 쉽고 간결한 문법과 많은 리소스들, 다양한 모듈들로 인해서 훨씬 익히기가 용이했다.


  단적인 예를 들어서 아두이노로 시리얼 통신을 하는 프로그램(모터의 지령지를 준다든가 센서값을 읽어들인다든가 하는 일들을 하기 위해서)을 작성하기 위해서는 시리얼통신을 수행하는 모듈이 있어야되는데 scilab은 마땅한게 없다. (matlab도 어렵기는 마찬가지임.) 하지만 파이썬은 잘 동작하는 모듈이 있어서 바로 사용하는데 아무런 문제가 없었다. 이 정도로 막강하다. 더군다나 numpy같은 수치해석 모듈과 scipy 같은 과학계산 모듈을 모두 무료로 아무 제한 없이 사용할 수 있으니 더 이상 큰 장점이 없다.


  만약 수치해석 툴이 필요하다면 파이썬을 공부해 볼 것을 강력히 추천한다.

[#00089]


Posted by 살레시오
,

 파이썬에 대해서 웹서핑을 하다가 파이썬으로 과학 계산을 하는 분야에 대한 좋은 발표 형식의 글이 있어서 번역해 보았다. 단순히 파이썬을 쉽고 배우기 쉬운 범용 프로그래밍 언어라고만 알고 있다면 흥미로운 주제글일 것이다.(원문)


 과학 계산에 사용되는 툴(소프트웨어)와 작업 흐름. 왜 파이썬인가?


1. 과학자(공학자도 포함)의 요구

  • (모의실험, 실제 실험 제어에서 얻어진) 데이터 취득

  • 데이터의 조작, 가공

  • (작업 결과의 이해를 돕기 위한) 시각화

  • 보고서, 출판, 발표물 제작등의 의사소통 결과물들


2, 조금 더 구체적인 요구사항들 (역자 주: 원필자가 다분히 파이썬을 의식하고 나열한 것 같음.)


  • 고전적인 수치 해석 방법이나 기본적인 기능에 대한 풍부한 라이브러리: 그래프를 그리거나 푸리에변환이나 보간법 알고리듬 같은 것을 다시 직접 짤 필요가 없다. 바퀴를 다시 발명할 필요가 없듯이.

  • 배우기 쉬워야 한다 : 전산이나 컴퓨터 과학을 전공하지 않은 사람이라도 몇 분안에 그래프를 그리거나 신호를 필터링하거나 푸리에 변환 결과를 볼 수 있어야 한다.

  • 동 료, 학생, 고객와 의사소통이 쉬워야 한다. 즉 범용성이 확보되어야 한다. (역자 주:내가 작성한 코드를 그들도 알고 있거나 단기간에 배워서 쓸 수 있어야 한다.) 프로그래밍 언어 자체가 가능하면 적은 문법 기호와 불필요한 루틴을 가지지 말아야 한다. 그래서 코드를 읽어나가는데 수학적/과학적인 부분에 집중할 수 있어야 한다.

  • 신속하게 실행 가능해야 하며 기왕이면 고속으로 동작해야 한다. (...)

  • 가능하다면 거의 모든 경우에 있어서 단일 환경/단일 언어를 사용해야 한다. 문제가 달라질 때 새로운 언어나 툴을 다시 익혀야 한다면 곤란한다.


현존하는 해결책들 (프로그램들) : 과학자들은 어떤 툴로 작업하는가?


1. 컴파일러 언어: C, C++, Fortran, 등등

  • 장점

    • 컴파일러가 최적화되어 있으며 매우 빠르다. 계산량이 매우 많을 때 이러한 언어들의 성능을 능가하는 대안이 없음.

    • 고도로 최적화된 과학 라이브러리 (역자 주:주로 행렬연산 등 수치해석에 사용되는) 가 존재함. 예를 들어서 BLAS 등

  • 단점

    • 사용하기 매우 어렵다. (역자 주: 이게 가장 큰 장애물임. C/C++를 웬만큼 안다고 해도 이러한 라이브러를 익숙하게 사용하기는 어려움) 특히나 전산 전공이 아닌 사람들에게는 이러한 언어들로는 답이 없음.

 

2. 상용 스크립팅 언어 : 매트랩(Matlab), 매쓰매티카(mathematica), 매이플(maple) 등

  • 장점

    • 다양한 영역의 수많은 알고리듬을 구현한 풍부한 라이브러리. 보통 이런 라이브러리는 컴파일되어 있기 때문에 실행속도도 빠르다.

    • 잘 갖춰진 개발환경 : 잘 정리된 도움말, 편리한 IDE 등등

    • 상업적인 지원이 가능함.

  • 단점

    • 기본적인 언어가 다소 부실하다.(역자 주: 문법 자체가 잘 정돈되어 있지 않음에도 불구하고 하위 호환서을 유지하기 위해서 개선이 되지 않고 있음.)

    • 비싸다. (역자 주: 가장 큰 단점임. 특히 학생들에게)


3. 대안 스크립팅 언어들 : Scilab, Octave, R, Igor, IDL, etc.


  • 장점

    • 오픈소스, 대부분 무료이거나 matlab보다는 저가임.(역자주: Igor와 IDL이 상용프로그램임. Igor는 그래픽 성능이 뛰어나며 IDL은 천문학과 의학 영상 분야에서 많이 사용된다고 함.)

    • 어떤 기능은 매우 특화되어 있음 : 예를 들어서 R의 통계분석, Igor의 그래프 기능 등. (역자 주 : Scilab은 제어분야와 수치해석에, Octave는 matlab과 거의 유사한 문법을 가지는 특징이 있다.)

  • 단점

    • matlab 보다는 (당연히) 라이브러리가 빈약함. 사용되는 언어 자체도 크게 발전적이지 않음.

    • 어 떤 소프트웨어는 한 분야에만 사용 가능함 : 예를 들어서 gnuplot 이나 xmgrace 는 매우 강력한 기능을 가졌지만 그래프 기능으로만 한정되어 있다. (역자 주: 많은 오픈소스 수치 해석 프로그램이 gnuplot 을 채용하지만 scilab은 matlab과 유사한 독자적인 그래프 기능을 가지고 있다.)


4. 파이썬(python)의 경우는 어떠한가?

  • 일반적인 특성

    • 파이썬은 일반적이고 현대적인 컴퓨팅 언어.

    • 표준 라이브러리 모듈

    • 파이썬으로 작성된 많은 수의 특화된 모듈이나 어플리케이션 : 웹 분야 등등 그리고 과학 계산 분야

    • 개발 도구들 (자동 시험, 문서 생성기)Python language: data types (string, int), flow control, data collections (lists, dictionaries), patterns, etc.

  • 장점

    • (matlab보다는 부족하지만) 매우 풍부한 과학 계산 라이브러리들

    • 잘 고안된 언어, 가독성이 뛰어나고 구조화가 잘 되어 있어서 "생각한 대로 코딩"할 수 있다.

    • 과학 계산 이외 영역에도 다양한 라이브러리가 있다. : 웹서버 관리, 시리얼포트 접근 등등

    • 무료이고 오픈소스 언어이다. 광범위하게 사용되고 활발한 사용자그룹들이 있다.

  • 단점

    • (matlab에 비하면) 다소 불편한 개발 환경.

    • 좀 더 세분화된 전문 영역에서는 필요한 알고리듬이 없을 수도 있다.


과학 계산에 사용되는 파이썬의 라이브러리들(building blocks)


 matlab, scilab, R 등과 달리 파이썬은 과학 계산 전용으로 미리 묶여진 모듈들이 없다.(역자 주 : 현재는  python(x,y) 나 winPython 등 과학계산 전용 패키지가 배포되고 있음. )  아래에 과학 계산에 사용되는 기본적인 모듈(라이브러리)을 나열하였다.




Posted by 살레시오
,

산술 연산자로 다음과 같은 것들이 있다.


연산자

기능

용례

+

덧셈


-

뺄셈


*

곱셈


/

나눗셈

결과는 실수형이다. (2.x에서는 int / int의 결과는 int)

//

자리내림 나눗셈

피연산자가 모두 정수인 경우 나눗셈의 결과 소수점 아래는 버리고 정수만 취한다.

둘 중 하나라도 실수라면 / 연산자와 동일함.

**

거듭제곱

2**10, (1+2j)**20

%

나머지

3%4, -10%3, 12.345%0.4


  나눗셈의 경우 ver 2.x에서는 정수형끼리의 나눗셈은 결과도 정수형이 된다. 다음 결과를 확인해 보라.


----------------------------------------------------------

>>> 4/5

>>> a, b=11,5 #a에 11, b에 5를 대입한다.

>>> b/a

----------------------------------------------------------


하지만 3.x버전에서는 나눗셈의 결과는 무조건 실수로 된다.


■ 2.x버전에서는 정수간 나눗셈의 결과는 정수였다. 즉 1/2는 0, 2/3은 1이다. 하지만 3.x버전에서는 정수간 나눗셈의 결과는 나누어 떨어지는 경우라도 무조건 실수형이 된다. 즉, 1/2는 0.2, 6/3은 2.0이 된다.


  연산자 //는 두 피연산자가 모두 정수일 경우 결과값이 실수이면 소수점 아래는 버린다.


······································································································································

>>> 9//2 # 결과는 4 (정수)

>>> 9//2.0 # 결과는 4.5(실수)

······································································································································


  연산자 %는 나눗셈 수행 후 정수몫을 구하고 난 나머지를 구하는 연산자이다. 다음을 확인해보라.


······································································································································

>>> 3%2

>>> 11.5 % 0.2

······································································································································


연산자 **는 거듭제곱 연산자이다. 다음 연산의 결과값들을 예상해 보자.


······································································································································

>>> 2**10

>>> a, c = 3, 4+5j #변수 a와 c를 차례로 초기화시킨다.

>>> c**a

······································································································································


  복소수의 거듭제곱도 (4+5j)*(4+5j)*(4+5j) 의 결과값을 보여준다. 파이썬에서는 복소수에 대한 산술 연산도 기본적으로 지원하므로 쉽게 수행할 수 있음을 알 수 있다.

#00003


Posted by 살레시오
,

  파이썬에서 사용자 폴더를 검색 경로에 추가시키기 위해서는 다음과 같이 sys 모듈의 path 리스트에 이 경로를 추가해 주면 된다.

---------------------------------------------------------------------------
>>> import sys
>>> sys.path.append('d:/mydir') # 윈도는 'd:\\mydir'
---------------------------------------------------------------------------

그러면 만약 다음과 같이 모듈을 import 할 때

---------------------------------------------------------------------------
>>> import mymod
---------------------------------------------------------------------------


사용자 폴더 안에서도 mymod.py 파일이 있는지 검색해 보게 된다.

  그런데 검색 경로 안에 어떤 폴더가 있고 그 폴더 안에 __init__.py 파일이 있다면 이것은 그 폴더가 파이썬 모듈이라는 것을 표시하는 역할을 한다. 예를 들어 다음과 같이 spam폴더 안에 파일이 두 개가 있다고 가정하자.


    d:/ mydir / spam /__init__.py # 이 파일이 spam 폴더를 파이썬모듈로 만든다.
    d:/ mydir /spam / module.py

그리고 d:/mydir 이 경로로 잡혀있다고 가정한다. 그렇다면 spam 폴더는 파이썬 모듈로 간주되고 module.py는 하위모듈로 취급된다. 그래서 module.py 모듈파일을 다음과 같이 불러올 수 있다.

---------------------------------------------------------------------------
>>> import spam.module
---------------------------------------------------------------------------

또는 

---------------------------------------------------------------------------
>>> from spam import module
---------------------------------------------------------------------------

즉, spam폴더 안에 __init__.py 파일이 있다면 spam 폴더는 모듈로 간주되고 module.py 는 서브모듈이 된다. 만약 __init__.py 파일을 지운다면 파이썬은 spam 폴더를 모듈로 취급하지 않으므로 module.py 도 더이상 서브모듈로 간주되지 않는다. 따라서 위의 명령어는 오류를 발생시킬 것이다.

이 __init__.py 은 그냥 빈 파일일 수도 있지만, 객체를 정의하거나 서브패키지의 특정 부분만을 선택하여 내보내거나 하는 코드를 가질 수도 있다. 만약 __init__.py 안의 내용을 접근하려면 다음과 같이 하면 된다. 

---------------------------------------------------------------------------
>>> import spam
---------------------------------------------------------------------------

이렇게 하면 __init__.py 안에 정의된 객체들이 spam 모듈로 올라오게 된다. 주의할 점은 이렇게 spam 모듈을 임포트한다고 해서 module.py 가 자동으로 하위모듈로 임포트되는 것은 아니라는 것이다. spam이 임포트될 때 module 도 임포트되려면 __init__.py 안에 다음과 같이 명시해 주어야 한다.

---------------------------------------------------------------------------
# __init__.py 화일의 내용
from . import module
---------------------------------------------------------------------------

이렇게 하면 spam.module 로 접근할 수 있다.

[#00085]

Posted by 살레시오
,

  파이썬의 numpy, scipy, 심지어 sympy 까지 있는데 MATLAB의 control system toolbox 같은 것은 없나.. 하고 생각했었는데 있었다. 사용자 매뉴얼을 아래에 링크하였다.

python control system library User's manual


이 모듈은 winPython 에서 기본적으로 설치되어 있지 않다. 하지만 윈파이썬의 콘솔창(Tools > Open command prompt) 에서 다음과 같이 명령을 내리면 자동으로 인스톨된다.

------------------------------------------------------------------------
> pip install control
------------------------------------------------------------------------

이 라이브러리는 기본적인 선형제어 시스템에 관련된 함수들과 클래스가 정의되어 있고 MATLAB control toolbox 와 이름체계가 비슷한 것 같다.

이제 simulink 같은 툴만 나오면 되는 건가.. 갈수록 파이썬에 놀라는 중이다.

[#00084]

Posted by 살레시오
,

  numpy를 이용해 생성된 ndarray객체는 다양한 field와 method를 갖고 있다. ndarray객체의 field/method는 dot(.)연산자를 이용하여 접근할 수 있다. (마치 C언어의 구조체나 공용체의 필드에 접근하는 방식과 같다.)

배열의 모양에 관련된 attribute 들

먼저, ​전치행렬을 구해주는 T attribute가 있다.

​-------------------------------------------------------------------------
>>> x = np.array([[1.,2.],[3.,4.]])

>>> x
array([[ 1., 2.],
​[ 3., 4.]])

>>> x.T
array([[ 1., 3.],
[ 2., 4.]])

>>> x = np.array([1.,2.,3.,4.])
>>> x
array([ 1., 2., 3., 4.])

>>> x.T # 1차원 배열에서 T attribute 는 동작하지 않는다.
array([ 1., 2., 3., 4.])
​-------------------------------------------------------------------------​​

위에서도 언급되었지만 1차 배열에서는 이것이 동작되지 않는다는 것을 주의해야 한다. 만약 배열 A의 복소전치행렬을 구하고 싶다면 A.conj().T (혹은 A.T.conj() ) 라고 하면 된다. 그리고 M이 행렬객체라면 단순히 M.H 라고 하면된다.

배열의 크기에 관련된 attribute 들

  배열의 크기에 관련된 attribute로 ndim, shape, 그리고 size가 있다. 이 중 shape는 읽기뿐만 아니라 쓰기도 가능하다.

  ndim 은 배열이 몇 차 배열인지를 알려준다.


​-------------------------------------------------------------------------
>>> x = np.array([1, 2, 3])
>>> x.ndim
1
>>> y = np.zeros((2, 3, 4))
>>> y.ndim
3
​-------------------------------------------------------------------------

​shape는 배열의 각 차수별 크기를 튜플로 반환하거나 지정해 줄 수 있다. 단, shape를 변경할 때는 변경 전과 전체 요소의 숫자가 같아야 한다.

​-------------------------------------------------------------------------
>>> x = np.array([1, 2, 3, 4])
>>> x.shape
(4,)
>>> y = np.zeros((2, 3, 4))
>>> y.shape
(2, 3, 4)
>>> y.shape = (3, 8)
>>> y
array([[ 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0.]])
>>> y.shape = (3, 6)
Traceback (most recent call last): File "<stdin>", line 1, in <module>
ValueError: total size of new array must be unchanged
​-------------------------------------------------------------------------

size는 ​​전체 요소들의 개수를 반환하며 np.prod(obj.shape)와 같은 결과를 생성한다.

​-------------------------------------------------------------------------
>>> x = np.zeros((3, 5, 2), dtype=np.complex128)
>>> x.size
30
>>> np.prod(x.shape)
30
​​-------------------------------------------------------------------------

기타

​나머지 attribute 들은 다음 표에 정리하였다.

TSame as self.transpose(), except that self is returned if self.ndim < 2.
data

배열의 시작을 가리키는 파이썬 버퍼 객체 

dtype

배열 요소의 데이터형 

flags

배열의 메모리 구조에 대한 정보 

flat

배열의 1차원 반복자 

imag배열의 허수부
real배열의 실수부
size배열의 요소 전체의 개수
itemsize배열 요소의 바이트 크기
nbytes배열의 전체 요소가 차지하는 바이트 크기
ndim배열의 차수
shape배열의 차수별 크기.
stridesTuple of bytes to step in each dimension when traversing an array.
ctypesAn object to simplify the interaction of the array with the ctypes module.
baseBase object if memory is from some other object.

[#00082]

Posted by 살레시오
,

 심파이(sympy)에서 미리 정의된 상수들은 다음과 같은 것들이 있다.


[표 1] 심파이의 기정의된 상수들

sympy 상수
의미
I, 1j, 1J
허수. (예를 들어 3+4j 는 3+4*I 와 같이 입력해야 한다.)
pi
원주율(3.141592..)
E
자연상수(2.718281..)
nan
not a number
oo
(positive) infinity
zoo
complex infinity


허수로 I를 이용할 때는 허수부와 I 사이에 반드시 곱기호를 넣어 주어야 한다.


>>> abs(1+2*I)
sqrt(5)


무리수의 근사값을 알고 싶다면 evalf() 멤버함수를 이용하면 된다.


>>> pi.evalf()
3.14159265358979

>>> E.evalf()
2.71828182845905




Posted by 살레시오
,