ブログ

割とコンピュータよりの情報をお届けします。

Python

Matlab/GNU OctaveのバックスラッシュをPythonで実施する場合の書き方

Matlab/GNU OctaveのバックスラッシュをPythonで実行する方法にいったん躓いたので記録を残す。

例えば,

2 x + y = 3
2 x - y = 4

という方程式を連立して解きたい場合には。

import numpy as np

x = np.array([\
    [2, 1],\
    [2, -1]]);

y = np.array([\
    [3],\
    [4]]);

A = np.linalg.solve(x, y)
#A = x \ y
print(A)

一応今回は解ける問題なので解は一つ。
1つの解で解けない時の処理がMATLAB / GNU Octaveなどのバックスラッシュ演算と少し違うらしい。
MATLABなどの動作では,同じようにメッセージは出てくれるが,式を満たす解のうち一つは返してくれる。

どちらかというとsolveよりもnumpy.linalg.lstsq()の方が処理として近いかもしれない。

≫ 続きを読む

2018/09/15 コンピュータ   TakeMe
タグ:Python

Pythonで一定間隔で実行2

だいぶん前の記事にPythonをつかって一定間隔で処理を実行するというサンプルを書いていた(JavaScriptならsetIntervalに相当する処理をさせたいということだった)。しかし,この時は知らなかったが,Python for .NETを使えば.NET Frameworkの支援を受けて一定間隔処理を記述することも可能であると知った。

Python for .NETを使って一定間隔処理のサンプルは以下のようになる。ちなみにWinPython以外だと入ってないかもしれないのでpip install pythonnetの実行からになると思います。(WinPython 3.7.0.1にはpythonnetがまだ非対応で3.7.0.2から暫定対応している )
最初は,Environment.Versionを調べる例を作ろうとしていたので,最初に残っている。
タイマーtickもPythonで記述してしまう例になっている。

import clr
from time import sleep

clr.AddReference('System')
from System import Environment
from System.Timers import Timer
from System import DateTime
print(Environment.Version.ToString())

running = True

def timer_tick(o, e):
    if running == True:
        print(DateTime.Now.ToString())
    else:
        timer.Stop()

timer = Timer()
timer.Interval = 1000
timer.Elapsed += timer_tick
timer.Start()

try:
    while running == True:
        sleep(1)
except KeyboardInterrupt:
    running = False

ちなみにEnvironment.Versionは4.5から全部4.0.**と表示されるようになってるらしい。(あれ,.NET Framework 4.0? おかしいなと思っても気にしないで)
この例では,clr.AddReference('System')はいらないらしい(Systemは暗黙的にReferenceに含まれるみたい)。

≫ 続きを読む

2018/08/24 コンピュータ   TakeMe
タグ:Python

Pythonで一定間隔で実行

Pythonで一定間隔で実行することが難しい。JavaScriptではsetInterval()が使えるのだが,Pythonは標準で用意されていないよう

Pythonで一定間隔であるコードを実行する方法を知べていたがなかなか見つからない。
標準ではないのかもしれない。微妙にこれでいいのか不安。

(今更気付いたがPythonの関数内では関数の外の変数も読めてしまうのですね)

 

import threading
import time
import sys

threadStop = False;
count = 0;
def run():
    global count, threadStop;
    count += 1;
    if threadStop != True:
        thread = threading.Timer(1, run)
        thread.start()
        print('run {0}'.format(count));
    else:
        threadStop = False;
    
    

thread = threading.Thread(target=run);
thread.start();

try:
    while (True):
        time.sleep(1);
    
except KeyboardInterrupt:
    threadStop = True;
    while threadStop == False:
        time.sleep(0.01);
    sys.exit();

(2018/08/25追記: .NETの支援があれば別の方法も使える)

≫ 続きを読む

2018/03/14 コンピュータ   TakeMe
タグ:Python