PythonからMatlabの関数を呼び出す
matlab.engineのインストール
管理者権限で起動したコマンドプロンプトで以下を実行
cd "C:\Program Files\MATLAB\R2016a\extern\engines\python\" C:\Python34\python.exe "C:\Program Files\MATLAB\R2016a\extern\engines\python\setup.py" install
なぜか「ImportError: No module named 'matlab'」
実行するとこんなエラーに。
ImportError: No module named 'matlab'
matlab.engineは以下にあります。
C:\Python34\Lib\site-packages\matlab\engine
解決策1 環境変数でPYTHONPATHを指定して実行する
C:\Program Files\MATLAB\R2016a\extern\engines\python>SET PYTHONPATH="C:\Python34\Lib\site-packages" C:\Program Files\MATLAB\R2016a\extern\engines\python>"C:\Python34\python.exe" "C:\Users\Cucco\Documents\MATLAB\matengen.py" [[1.0,2.0,3.0,4.0,5.0]]
解決策2 実行する.pyファイルの中でパスを記載する
# -*- coding: utf-8 import sys sys.path.append('C:\Python34\Lib\site-packages') import matlab.engine eng = matlab.engine.start_matlab() a = matlab.double([1,4,9,16,25]) b = eng.sqrt(a) print(b)
実行結果
C:\Python34>C:\Users\Cucco\Documents\MATLAB\matengen.py [[1.0,2.0,3.0,4.0,5.0]]
Matlabで1×Nのサイズのベクトルを2次元配列に変換
まずは変換のルールを確認
3×4の2次元配列を用意。
>> a=[[1 2 3 4]; [5 6 7 8]; [9 10 11 12]] a = 1 2 3 4 5 6 7 8 9 10 11 12
reshape()で1×Nに変換。列方向に拾って1×Nを作る様子。
>> b=reshape(a,1,[]) b = 1 5 9 2 6 10 3 7 11 4 8 12
4列の形にしてほしいので、reshape()でn×4に変換。元に戻りました。
>> c=reshape(b,[],4) c = 1 2 3 4 5 6 7 8 9 10 11 12
元に戻りました。
行方向で2次元配列を拾って行ってほしい
手元にあるデータの並びは行方向に拾った感じのデータなので、それを2次元配列にしたい。
1×nのベクトルを用意。
>> d=[1 2 3 4 5 6 7 8 9 10 11 12] d = 1 2 3 4 5 6 7 8 9 10 11 12
あとで転置するので、行を4行になるようにreshape()
>> e=reshape(d,4,[]) e = 1 5 9 2 6 10 3 7 11 4 8 12
転置すると期待通りに。
>> f=transpose(e) f = 1 2 3 4 5 6 7 8 9 10 11 12
PythonからMySQLを操作する
構築
Python3.4とMySQL5.7を利用。
Pythonを先に入れておく。Python のバージョンは、Connectorの対応バージョンと合わせておく。
MySQLのインストール時には、rootユーザのパスワードの設定が必要。ここでは、passwordとします。
Connector
http://dev.mysql.com/downloads/connector/python/
Connector自体は、MySQLのインストーラに含まれている様子。
準備
データベースを作ります。
スタートメニューにいる”MySQL 5.7 Command Line Client - Unicode”を開いて、ログイン。
最初はこんな感じのデータベースがある。show databases;がコマンド。
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sakila | | sys | | world | +--------------------+ 6 rows in set (0.00 sec)
データベースを作ります。create database testdb;がコマンド。testdbがデータベース名。
mysql> create database testdb; Query OK, 1 row affected (0.01 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sakila | | sys | | testdb | | world | +--------------------+ 7 rows in set (0.00 sec)
テストコード
pythonで以下を実行
# -*- coding: utf-8 import mysql.connector config = { 'user': 'root', 'password': 'password', 'host': 'localhost', 'database':'testdb', 'charset':'utf8' } cnx = mysql.connector.connect(**config) cur = cnx.cursor(buffered=True) sql = 'DROP TABLE IF EXISTS pet;' cur.execute(sql) cnx.commit() sql = 'CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);' cur.execute(sql) cnx.commit() # select cur.execute('SELECT * FROM pet;') row = cur.fetchone() sql = 'INSERT INTO pet VALUES (%s, %s, %s, %s, %s, %s);' data= ('Puffball','Diane','hamster','f','1999-03-30',None) cur.execute(sql, data) sql = 'INSERT INTO pet VALUES (%s, %s, %s, %s, %s, %s);' data= ('Puffball','Diane','hamster','m','1999-03-30',None) cur.execute(sql, data) cnx.commit() # select cur.execute('SELECT * FROM pet;') row = cur.fetchall() # 出力 for i in row: print(i) cur.close() cnx.close()
実行結果
C:\Python34>python C:\Python34\msql_test.py ('Puffball', 'Diane', 'hamster', 'f', datetime.date(1999, 3, 30), None) ('Puffball', 'Diane', 'hamster', 'm', datetime.date(1999, 3, 30), None)
MySQL 5.7 Command Line Clientでテーブル定義の情報を見てみると
mysql> describe pet; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | name | varchar(20) | YES | | NULL | | | owner | varchar(20) | YES | | NULL | | | species | varchar(20) | YES | | NULL | | | sex | char(1) | YES | | NULL | | | birth | date | YES | | NULL | | | death | date | YES | | NULL | | +---------+-------------+------+-----+---------+-------+ 6 rows in set (0.00 sec)
mysql> select * from pet; +----------+-------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +----------+-------+---------+------+------------+-------+ | Puffball | Diane | hamster | f | 1999-03-30 | NULL | | Puffball | Diane | hamster | m | 1999-03-30 | NULL | +----------+-------+---------+------+------------+-------+ 2 rows in set (0.00 sec)
移動平均
移動平均を返す関数movingAverage。
function [ output_args ] = movingAverage(dataNx1,AverageWindowSize )
filterfunc=ones(1,AverageWindowSize);
output_args = filter(filterfunc,AverageWindowSize,dataNx1);
end
テストコード。yとして、sin関数の値にランダムノイズを加えておく。
x=0:0.05:2*pi;
y=sin(x)+rand(size(x))*0.1;
plot(x,y)
hold on
plot(x,movingAverage(y,5))
結果。青がy。赤が移動平均。
行列の重複排除
uniqueを使って、複数の行列から、同じ行列を削除する。
2×4の行列をいくつか作っておく。a4とa5が重複。
>> a1=[1 2 3 4; 5 6 7 8]
a2=[2 3 4 5; 6 7 8 9];
a3=[3 4 5 6; 7 8 9 0];
a4=[1 2 3 4; 5 6 7 8];
a5=[2 3 4 5; 6 7 8 9];a1 =
1 2 3 4
5 6 7 8
reshapeで行ベクトルにして、つなげておく。
>> a1v=reshape(a1,1,[ ])
a2v=reshape(a2,1,[ ]);
a3v=reshape(a3,1,[ ]);
a4v=reshape(a4,1,[ ]);
a5v=reshape(a5,1,[ ]);aa=[a1v;a2v;a3v;a4v;a5v]
a1v =
1 5 2 6 3 7 4 8
aa =1 5 2 6 3 7 4 8
2 6 3 7 4 8 5 9
3 7 4 8 5 9 6 0
1 5 2 6 3 7 4 8
2 6 3 7 4 8 5 9
行単位でuniqueを実行して、reshapeで2×4の行列に戻す。
>> ua=unique(aa,'rows')
size(ua)
reshape(ua(1,:),2,4)
reshape(ua(2,:),2,4)
reshape(ua(3,:),2,4)ua =
1 5 2 6 3 7 4 8
2 6 3 7 4 8 5 9
3 7 4 8 5 9 6 0
ans =3 8
ans =1 2 3 4
5 6 7 8
ans =2 3 4 5
6 7 8 9
ans =3 4 5 6
7 8 9 0
redmineのアップデート
redmineのアップデートします。
新しいパッケージのダウンロード。URLは以下で取得。
cd /usr/share/
sudo wget http://www.redmine.org/releases/redmine-3.2.2.tar.gz
sudo tar zxvf /home/pi/Documents/msqlback/redmine-3.2.2.tar.gz
rm redmine-3.2.2.tar.gz
cd /usr/share/redmine-3.2.2
データベースの接続ファイルをコピー。後でパーミッションエラー(passenger database.yml access denay)になったので、パーミッションも変更しておく。
sudo cp -p /etc/redmine/default/database.yml /usr/share/redmine-3.2.2/config/
sudo chown pi:pi /usr/share/redmine-3.2.2/config/database.yml
インストールコマンドを実行するとエラーになるので事前に以下を実行。
sudo apt-get install mysql-client libmysqlclient-dev
インストール。
ImageMagickがインストールされていない場合は以下のように実行してrmagickのインストールを省略する必要があります:
cd /usr/share/redmine-3.2.2
sudo bundle install --without development test rmagicksudo bundle exec rake generate_secret_token
sudo bundle update
sudo bundle exec rake db:migrate RAILS_ENV=production
sudo bundle exec rake redmine:plugins:migrate RAILS_ENV=production
sudo bundle exec rake tmp:cache:clear tmp:sessions:clear
アップデートなので、シンボリックリンクを張りなおし。
cd /var/www
sudo ln -nfs /usr/share/redmine-3.2.2/public redmine
apacheを再起動して終わり。
sudo /etc/init.d/apache2 reload
sudo /etc/init.d/apache2 restart
Rasberry PIでのapacheとredmineのインストールメモ
raspbianにredmineを入れたときのメモ。
わけわからなくなりそうだったのでapacheとredmineまとめ。
apache2のインストール
sudo apt-get install apache2
mysqlのインストール。1個目を入れた時に、mysqlのrootのパスワードを聞かれるので用意しておく。2個目は、redmineを入れたときに要求されたので事前に入れておくとよい。
sudo apt-get install mysql-server
必要らしい何かのインストール
sudo apt-get install libapache2-mod-passenger
redmineのインストール。利用するDBになにを利用するか聞かれる。DBの設定をやってくれる様子。mysqlのrootのパスワードも用意。redmineからDBアクセスする際のパスワードを聞かれるので用意しておく。
sudo apt-get install redmine
/etc/redmine/default/database.ymlの設定は、自動でやってもらえた模様。こんな感じ。
pi@raspberrypi3:~ $ sudo more /etc/redmine/default/database.yml
production:
adapter: mysql2
database: redmine_default
host: localhost
port:
username: redmine_default
password: password <=Redmine用のパスワード
encoding: utf8
サイトのディレクトリの用意
cd /var/www
sudo ln -s /usr/share/redmine/public redmine
sudo chown -R www-data:www-data /var/www/redmine
redminサイトの設定
pi@raspberrypi3:~ $ sudo more /etc/apache2/sites-available/redmine.conf
DocumentRoot /var/www/
PassengerDefaultUser www-data
<Location /redmine>
RailsEnv production
RackBaseURI /redmine
Options -MultiViews
</Location>
もともと入っていた設定を無効に。
cd /etc/apache2/sites-available
sudo a2dissite 000-default
http://localhost/で、ディレクトリが見えてしまうので、/etc/apache2/apache2.confを編集。編集前。
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
Indexesを消す。編集後。
<Directory /var/www/>
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
apacheの設定再読み込みと再起動。
sudo /etc/init.d/apache2 reload
sudo /etc/init.d/apache2 restart
redmineのバージョンが古いので、次回はアップデートしたい。
Environment: Redmine version 2.5.2.devel Ruby version 2.1.5-p273 (2014-11-13) [arm-linux-gnueabihf] Rails version 4.1.8 Environment production Database adapter Mysql2 SCM: Git 2.1.4 Filesystem Redmine plugins: no plugin installed