Python関連のことを調べてみた2020年03月29日

Python関連のことを調べてみた2020年03月29日

python openCV の画像をトリミングする関数作ったので使ってください。

python の openCV で画像をトリミングするときには、画像のインデックスを下のように指定しないといけません:

“`python

import cv2

img = cv2.imread(“hoge.jpg”)

trimmedImg = img[0 : 50, 0: 50]
“`

これだとぱっと見るだけでどこをトリミングしているか分かりません。(僕はそうでした)
なので、cv2.rectangle() みたいなトリミング関数を作りました。ぜひ使ってください。

“`python:trim.py
import cv2

def trim(img, pt1, pt2):
return img[pt1[1]:pt2[1], pt1[0]:pt2[0]]
“`
pt1, pt2 はこのように入力すること。
![pts.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592903/37f635f3-62fc-9324-b923-cac6bc5af547.jpeg)

元記事を表示

気象過去データの利用5(東京の天気遷移)

気象庁が、2020年3月末まで、気象過去データを無償で提供しています。
(参考) 気象過去データの利用環境
https://www.data.jma.go.jp/developer/past_data/index.html

基本的な気象データは、「利用目的・対象を問わず、どなたでもご利用頂けます。」とのことなので、気象データを使って何か行っていきます。

気象庁の「過去の気象データ・ダウンロード」ページからもダウンロードできますが、まとめて一括してダウンロードできるため非常に便利です。
利用可能なデータは、以下の掲載されています。
https://www.data.jma.go.jp/developer/past_data/data_list_20200114.pdf
もうすぐ期限ですので、必要な方は早めのダウンロードを

今回は、天気の推移をネットワークグラフにします。
グラフの表示には、NetworkX(2.4)を利用します。

# データダウンロード
「気象過去データの利用2(東京オリンピック期間の最高気温変遷)」と同様に「地上気象観測」-「時・日別値」を利用します。
ファイル

元記事を表示

二重振り子のシミュレーション

#二重振り子とは

カオス現象として有名な実験です。
カオス現象とは初期状態がその後の状態に大きく影響を与える現象です。
バタフライエフェクトという、蝶の羽が気流によって台風が発生するという話も同じカオス現象の説明で出てきます。(正しいくないかもしれません)

[こちら](https://qiita.com/hiRina/items/519d5168c2c2fdf012cd)で作ったオイラー・ラグランジュ法を用いて運動方程式の導出・シミュレーションをします。

#変数定義
![define.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/2fb7c89b-4528-19f2-4e51-4298a405271a.jpeg)

質点系・二次元で問題設定します。

m1の速度、m2の速度は

“`math
\vec{R_{m_1}} =\left(
\begin{array}{ccc}
r

元記事を表示

kerasを使って簡単にCNNネットワークを実装・学習する方法

## この記事は
udemyの「[【画像判定AI自作にチャレンジ!】TensorFlow・Keras・Python・Flaskで作る機械学習アプリ開発入門](https://www.udemy.com/tensorflow-advanced/)」を受講して、学んだこと+αを自分なりにまとめたものです。

## 環境
以下の環境で実行しました。

– python 3.6.4
– keras 2.2.4
– tensorflow 1.10.0

## 必要なモジュールのインポート

“`python
import keras
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras.utils import np_utils
“`

簡単に解説を加えます。

### keras.modelsについて
まず、インポートしているのは、Se

元記事を表示

AtCoder Beginners Contest 過去問チャレンジ6

# AtCoder Beginners Contest 過去問チャレンジ6

## [ABC090D – Remainder Reminder](https://atcoder.jp/contests/abc090/tasks/arc091_b)

a を b で割った余りが K 以上ということは、b は K + 1 以上なのが確定. b で割った余りは 0..b-1 で、この1周期に出現する K 以上の個数は b – K となる. a は N 以下なので、周期数は N / b となる. 後は周期の余りについて考える必要があるが、ところで N は1から始まるので、周期は 1, 2, …, b – 1, 0 の順となる. つまり N % b が n の場合、1, 2, …, n となり、K = 0 と K = 1 の個数が同じとなることに注意.

“`python
N, K = map(int, input().split())

result = 0
for b in range(K + 1, N + 1):
result += (N // b) * (b – K)

元記事を表示

多倍長演算の活用

# 多倍長演算の活用
Python の多倍長演算を活用して、処理の簡潔化・高速化を行う方法について書きます。

## 整数と配列の対応
Python では多倍長整数が扱えます。これを、 $k$ bitごとに区切って、それぞれが $k$ bit の整数を表していると見ることことを考えます。

具体的には、 $0$ 以上 $2^k$ 未満の要素からなる配列 $A = [a_0,\ \ldots,\ a_{N-1}]$ について、対応する整数を
$${\rm number}(A) = \sum_{j=0}^{N-1}\ a_j \cdot 2^{kj} $$
と定めます。逆に整数 $n$ について、配列 ${\rm list}(n)$ を $${\rm list}(n)[i] = {\rm int}(n\ /\ (2^{ki}))\ {\rm mod}\ (2^{k}) $$ で定義します。 $A[i]$ は $A$ の $i$ 番目の要素です。
すると ${\rm number}$ と ${\rm list}$ は互いに逆写像になり、非負整数全体と $0$ 以上 $2^k$ 未満の要素から

元記事を表示

argparseからhydraへの移植

Pythonのargparseの設定をhydraに変換する際に,調べたことを備忘録的にまとめたものです.
最後にhydraにしかない便利機能を書いています.

## はじめに
機械学習の実験スクリプトをpythonで書く際,ハイパーパラメータなどの設定方法として,[argparse](https://docs.python.org/3/library/argparse.html)を使っていました.
しかし,実験が複雑になるにつれて,argparseの設定を記述したファイルだけで,かなりの行数になってしまったり,設定を構造化したいなどの欲が出てきました...
そこで,[ymymさんの「ハイパラ管理のすすめ -ハイパーパラメータをHydra+MLflowで管理しよう-」](https://ymym3412.hatenablog.com/entry/2020/02/09/034644)を読み,「これだ!」となったので,使ってみることにしました.
そして,argparseで書いていた実験の設定をhydraに移行する際にいろいろ調べたので,それをまとめてみました.

## hydraとは?

元記事を表示

AtCoder Grand Contest 過去問チャレンジ1

# AtCoder Grand Contest 過去問チャレンジ1

## [AGC003B – Simplified mahjong](https://atcoder.jp/contests/agc003/tasks/agc003_b)

同じカードで最大限ペアを作って、余ったら繰り越して、繰越分を優先して使ってることにする(つまり余った場合は今のカードの方を繰り越す)で OK なのだが、0枚のカードに繰越が来た場合、優先して使うカードがないので、そこで繰越分を捨てなければいけない. そこだけ気にすれば OK.

“`python
N = int(input())

result = 0
remainder = 0
for _ in range(N):
A = int(input())
result += (A + remainder) // 2
if A == 0:
remainder = 0
else:
remainder = (A + remainder) % 2
print(result)
“`

## [A

元記事を表示

玄関2ロックのセサミを1ボタンで解錠するIFTTTボタンを作ってみた(AWS Lambda経由)

# 背景
我が家の玄関には2ロックのセサミminiがある。公式アプリ経由で解錠はできるのだが、特にWi-fiポイント経由接続とBluetooth経由接続、どっちにつながるかが微妙な距離感では通信が安定化するまでに15~20秒くらいかかることもあり、玄関の前でしばし佇まねばならず特に冬は辛い。

「では公式アプリを使わずに解錠しよう。となるとAPI叩くことになるのか」と考え、pythonistaからお手製のコードを走らせることでiPhoneから直接セサミAPIを叩く方式を取ったが、このpythonistaというやつ、重たいのか何なのか知らないがiPhone上で固まってしまうことが多く、これまた寒いのに玄関前で20秒くらいムダに佇むことが多くなった。

# そこで考えたこと
セサミAPIを叩くpythonコードはpythonista運用時代に確立していたので、これをiPhoneでない環境から動作させようと思った…が、鯖持ってないし鯖買って運用とかやりたくなかったので、AWS Lambdaで動かそうと心に決めた。APIはAWS API Gatewayで作ってやればいいし。

アーキテクチャは

元記事を表示

PythonでPathを自然ソートする

# pathをソートする
pathを自然ソート(数字通りのソート)をするなら、下記の様に`key`にラムダ式を入れれば良い。

“`py

natsorted(list(pathlib.Path(パス).glob(“*”)),key=lambda x:x.name)
“`
以下余談

## pathごとソートしたら辞書ソートになってしまう話
大量の画像をPDF化するときに画像データをソートする必要があった。画像ファイルの名前はこんな感じ。

“`
1.jpg
200.jpg
12.jpg

“`

これを数字通りに並べたいから辞書ソートじゃなくて自然ソートしたい。
`pathlib`で取得、`natsort`を使ってソートしたら、こんな感じなった。

“`python
PosixPath(‘/Users/usrname/images/1.jpg’),
PosixPath(‘/Users/usrname/images/10.jpg’),
PosixPath(‘/Users/usrname/images/20.jpg’),

“`

*辞書ソートやんけ*

いや

元記事を表示

WindowsでFEniCSを試す!

# はじめに

[CAE](https://ja.wikipedia.org/wiki/CAE)の世界もOpen Sourceで利用できるものが増えてきた。今回は、[有限要素法](https://ja.wikipedia.org/wiki/%E6%9C%89%E9%99%90%E8%A6%81%E7%B4%A0%E6%B3%95)のOpen Sourceの一つで、Pythonインターフェースを持つ[FEniCS](https://fenicsproject.org/)を試してみる。

# この記事で実施すること

CAEのOpen Sourceの多くは、Linux環境が多いが、今回はWindows10(WSLは利用)で実行して、FEniCSのチュートリアルのExampleを動かすところまで行う。

# 環境

Windows 10 home
WSL Ubuntu
Anaconda(Python 3.7.6 WSL上でインストール)
Chrome 80.0.3987.132

# WSL環境構築

FEniCSはLinux環境が必要なため、WSLでLinux環境を構築する。構築方法は他サ

元記事を表示

サーボドライバ PCA9685 を使って複数のサーボモータ MG996R を制御してみた

# ハードウェアの準備

### 用意するもの

動かしたいサーボモータを複数用意します。
ここではMG996Rを12個動かすことを目標としますが、他のサーボモータや個数でも同様だと思います。
Jetson Nano単体では、せいぜい数個程度のサーボモータしか制御できません。
そのため、サーボドライバ PCA9685を使用します。
PCA9685は16チャンネルあるので、サーボモータを最大16個まで制御することができます。
ここでは12個のサーボモータを動かしたいので、1つあれば充分です。

|デバイス|個数|説明|
|—|:-:|—|
|Jetson Nano|1 | |
|PCA9685|1|サーボドライバ |
|MG996R|12|サーボモータ |
|ACアダプタ 5V-4A|2|Jetson NanoおよびPCA9685用の電源 |
|ジャンパワイヤ メスーメス |4 |Jetson NanoとPCA9685を接続 |

### 回路図

Jetson NanoのGPIOピンのレイアウトは次のようになっています。
Pythonで多変量正規分布を使わずに楕円っぽい散布図を作る

#はじめに
 機械学習のサイトでは点を楕円形にプロットした図をよく見かけます。その作り方が分からなかったので、Numpyをいじって作ってみました。

#コード

“`python:ellipseLike.py
import numpy as np
import matplotlib.pyplot as plt

#出力件数
n = 1000

#乱数を発生
x = np.random.uniform(-4, 4, n)
y = np.random.uniform(-1, 1, n)

#フィルタリング
coordinates = np.array([((x[i])**2 + (y[i])**2)**(1/2) < 1 for i in range(n)]) index = np.where(coordinates==True) #座標を操作 x_points = x[index] *4 y_points = y[index] #座標を回転移動(30度) x_points2 = x_points * (3**(1/2)) - y_points * (1/2) y_points2 =

元記事を表示

yukicoder contest 241 参戦記

# yukicoder contest 241 参戦記

# A 1009 面積の求め方

8分半で突破. ヒント通り区分求積法でスパッと解いてみた. 区間をどれくらいの数で割ればいいのかに悩んだが、適当にえいやで4096でやったら一発目で良さげな精度が出たので、提出してみたら無事 AC.

“`python
a, b = map(int, input().split())

x = a
result = 0
t = 1 / 4096
while x < b: result += abs((x - a) * (x - b) * t) x += t print(result) ``` # B 1010 折って重ねて 41分で突破. 整数で処理するコードを書いて、なんで AC しないんだと延々と悩んでいた. アホすぎる. 縦と横で短い方を限界まで折ってから、長い方を限界まで折ればいい. ```python x, y, h = map(int, input().split()) if x < y: x, y = y, x x *= 1000 y *= 10

元記事を表示

AtCoder Beginner Contest 160 参戦記

# AtCoder Beginner Contest 160 参戦記

## ABC160A – Coffee

1分半で突破. 書くだけ.

“`python
S = input()

if S[2] == S[3] and S[4] == S[5]:
print(‘Yes’)
else:
print(‘No’)
“`

## ABC160B – Golden Coins

2分半で突破. 500円のほうがコスパがいいので、500円を可能なだけ、余りを5円で.

“`python
X = int(input())

result = (X // 500) * 1000
X -= (X // 500) * 500
result += (X // 5) * 5
print(result)
“`

## ABC160C – Traveling Salesman around Lake

7分で突破. ジャッジが詰まっててコードテストがなかなか実行されなくて参った. N軒全て回るということは、移動開始地点と移動終了地点の間だけ歩かなくていいということなので、それが最大

元記事を表示

PythonでABC160を解きたかった

### はじめに
A,Bしか解けませんでした。簡単だったのに。

### A問題
[問題](https://atcoder.jp/contests/abc160/tasks/abc160_a)

**考えたこと**
index指定してif

“`python
s = str(input())
if s[2] == s[3]:
if s[4] == s[5]:
print(‘Yes’)
quit()
print(‘No’)
“`

### B問題
[問題](https://atcoder.jp/contests/abc160/tasks/abc160_b)

**考えたこと**
500でXを割れるだけ割って余りを5で同様にしています。

“`python
x = int(input())
a = x // 500
b = (x % 500) // 5
ans = (1000*a+5*b)
print(ans)
“`
### C問題
[問題](https://atcoder.jp/contests/abc160/tasks/abc160_c)

元記事を表示

ラインプロファイルの取得法

自身の研究の都合上、画像データを取り扱うことが多く、ラインプロファイルを取得したくなるときがあります。

画像中の二点を指定し、離散的な画像データを補完しながら二点間でのラインプロファイルを1ピクセルの間隔で取得するプログラム
[How to extract an arbitrary line of values from a numpy array?](https://stackoverflow.com/questions/7878398/how-to-extract-an-arbitrary-line-of-values-from-a-numpy-array)を参考にして、
任意の線幅でラインプロファイルを描けるようにしましたので、サンプルコードとその結果を紹介したいと思います。

サンプルコードは、

“`python
import numpy as np
import scipy.ndimage
import matplotlib.pyplot as plt

#– Generate some data…
x, y = np.mgrid[-5:5:0.1, -5:5:0

元記事を表示

Pythonで毎日AtCoder #19

### はじめに
[前回](https://qiita.com/taxfree_python/items/094f96e9348ab8d80148)
ABC160ができなくてつらかったので諦めてこっち書きます。
疲れているのでとっても雑に書きます。すみません
### #19
[問題](https://atcoder.jp/contests/abc136/tasks/abc136_c)

**考えたこと**
h[i]とh[i-1]の関係を比較したときに単調非減少になるにはh[i]の方が大きいか同じでなければならない。今回はマスの高さを-1することができるのでもし-1した場合にはcheckerの真偽を変更して対応している

“`python
n = int(input())
h = list(map(int,input().split()))

seed = h[0]
checker = True

for i in range(1,n):
if h[i] == h[i-1]:
continue
d = h[i] – h[i-1] + 1
if d

元記事を表示

製薬企業研究者ゆきやのPython記事まとめ

# はじめに

私がQiitaに投稿したPythonに関連する記事のまとめです。
今後もPythonに関する記事を追加していくごとに、こちらのまとめも更新していきます。

# 初級編

## 環境構築

– [PythonとAnacondaのインストール方法](https://qiita.com/yukiya285/items/6bc3bcef00f7d13c94f1)
– [データサイエンスで用いるPythonライブラリのインストール方法](https://qiita.com/yukiya285/items/8b80879ecf13cd3f8d5d)

## 基本的な文法・構文

– [Pythonというプログラミング言語の基本的な記述ルール](https://qiita.com/yukiya285/items/109e2d26234d80566299)
– [変数とデータ型](https://qiita.com/yukiya285/items/d63d5071ca32254b2735)
– [演算子](https://qiita.com/yukiya285/items/ac774

元記事を表示

ドキュメント作成ツールSphinxに入門する

# はじめに
## 本エントリで説明すること
– Python製のドキュメント作成ツール「Sphinx」の導入から簡単なドキュメント生成まで
– ホットリロードするモジュール「sphinx-autobuild」のインストールと使い方
– テーマの変更方法

## 本エントリで説明しないこと
– python3とpipのインストール方法
– reStructuredTextについての細かい説明
– MkDocsのような他のドキュメント作成ツールとの比較
– Sphinxの細かいオプション等

# 前提
– python3系をインスールしていること

# 筆者の環境
– macOS Catalina 10.15.3
– Python 3.7.4

# venvでSphinx用の仮想環境を作成する
Sphinx用の仮想環境のディレクトリを作成します。
ディレクトリ名は任意です

“`
$ mkdir sphinx
“`

作成したディレクトリに移動し、仮想環境を作成します
仮想環境名はここではsphinx-venvとしておきます。

“`
$ cd sphinx
# 「python3

元記事を表示

OTHERカテゴリの最新記事