- 1. venvで仮想環境構築
- 1.1. Pythonのクロージャの仕組み
- 1.2. AtCoder Beginner Contest 177
- 1.3. jupyter lab上で画像のラベリングをする
- 1.4. 【総集編】8月ふりかえり
- 1.5. Protocolでパラメータの型をしばる
- 1.6. Python3のリスト・辞書型の書き方
- 1.7. Pytorchで新しくRNNを作るには?
- 1.8. 【Python】いろんな型について調べてみた!(typing)
- 1.9. AtCoder:Python:サンプルテストをパパっとする。
- 1.10. 機械学習初心者がRBMをやってみた
- 1.11. 【Python】競走馬の強さをレーダーチャートで可視化
- 1.12. AtCoder Beginner Contest 177 C問題「Sum of product of pairs」解説(Python3,C++,Java)
- 1.13. PythonでAtCoder Beginner Contest 177 E – Coprime
- 1.14. bootcampのeasy100をやった記録 31-40
- 1.15. ABC177参戦記
- 1.16. #1 Djangoのwebアプリケーションをデプロイするまで(AWSのEC2でインスタンス構築編)
- 1.17. pythonコマンドでpythonはpython3.8を指す
- 1.18. ABC177 B問題メモ Python
Pythonを使ったフィボナッチ数列
読んでたPython本でフィボナッチ数列に関して出てきたので調べつつメモ程度のライトな内容でまとめておきます。
なお、私の方はデザインの専門卒なので数学関係やコンピューターサイエンス関係の大学を出ている方からずると色々雑な点があるかと思われますがご了承ください。
# 使う環境
– Python 3.8.5
– VS Code# そもそもフィボナッチ数列とは
イタリアの数学者のレオナルド・フィボナッチさんにちなんで名づけられた数列です(英語ではFibonacci sequence)。
`0, 1, 1, 2, 3, 5, 8, 13, 21…`といった値の数列になります。
最初(0のインデックス)が0、次(1のインデックス)が1、それ以降は1つ前と2
式で書くと以下のような感じになります(数列の$n$番目の値を$F_n$とします)。“`math
F_0 = 0\\
F_1 = 1\\
F_n = F_{n – 1} + F_{n – 2}
“`また、この数列はいわゆるデザイン方面、特に黄金比(1:1.618…)とも密接に絡んでおり、デザイン関係の本な
Pythonで手書き文字認識をするまで:環境構築編
自分の備忘録として、Pythonで手書き文字認識を行うサンプルコードを動かす手順を記事として残しておこうと思います。その第一弾として、環境構築について簡単にメモを残します。
##Linux環境をWindowsに追加
私の環境はWindows 10ですが、Linux環境で開発をしたかったため、Linux環境を入れます。
Dual bootやVM wareなどの仮想マシンを立ち上げる、などの方法しか以前は知りませんでしたが、
WSL(Windows Subsystem for Linux)というものがあることを知り、導入してみます。と言っても、Microsoft StoreからUbuntuを検索するだけで詰まることもなく導入成功です。
venvで仮想環境構築
Pythonはバージョン管理を間違えると思わぬところではまってしまうので、何かいい管理方法がないか探してみました。
そこで見つけたのが、venvです。
こちらの記事 venv:
Pythonのクロージャの仕組み
## はじめに
Pythonのクロージャを勉強していて、“`python
def outer():
x = 0
def inner():
print(x)return inner
func = outer()
func() # -> 0
func() # -> 0
“`というコードを見たとき、func()を呼び出した時になぜ変数xを用いることができるのか疑問に思ったので調べてみました。
## Pythonでのメモリ管理
Pythonでは、参照カウンタという方法を用いてメモリ管理を行っています。
それぞれのオブジェクトは、いくつの変数から参照されているかという情報を持っていて、その値が0になる(=どの変数からも参照されていない)といずれ破棄されます。
ということは、関数outer()の実行が終了しても変数xがfunc()内で使えるということは、func()内では何らかの方法でxを参照していると考えられます。そこで、どのように参照しているかを調べていきます。## 関数オブジェクト
Pythonでは関数もオブジ
AtCoder Beginner Contest 177
##[A – Don’t be late](https://atcoder.jp/contests/abc177/tasks/abc177_a)
“`python:python
D, T, S = list(map(int, input().split()))if T >= D / S:
print(‘Yes’)
else:
print(‘No’)
“`##[B – Substring](https://atcoder.jp/contests/abc177/tasks/abc177_b)
– 1000*1000なら全探索で間に合う
“`python:python
S = str(input())
T = str(input())Ans=1000
for i in range(0, len(S)):
Tmp=0
if i + len(T) <= len(S): for j in range(0, len(T)): if S[i+j] != T[j]: Tmp += 1
jupyter lab上で画像のラベリングをする
## やりたいこと
AIに使いたい画像のラベリングをしたいが、GUIを作るのが面倒。。。と思い、
JupyterLab上でできないかーと考え、色々調べてたらできたのでそのときのメモ。
matplotで表示した画像を更新しながらinputでラベリングを入力するようなイメージ。## 実行環境
– Python 3.8.5
– jupyter lab 2.2.2
– mac(windows10でも実行済み)## コード
sample_imgフォルダにある画像をラベリングする。### 準備
“`python
import cv2
import matplotlib.pyplot as plt
import os
import glob
import IPython
# 画像のpathを取得
img_list = glob.glob(os.path.join(r”sample_img”,”*.jpg”))
img_list
>>> [‘sample_img/img3.jpg’, ‘sample_img/img2.jpg’, ‘sample_img/img1.jpg’]
“`#
【総集編】8月ふりかえり
# はじめに
今月のふりかえりです。
月1で振り返り
今後は何を勉強するかを決めます。——————————–
# 8月 1週目2020/08/02 [Python3のノート](https://qiita.com/ymd65536/items/ed62043a6671b7529390)
——————————–
# 8月 2週目2020/08/10 [Python3のノート](https://qiita.com/ymd65536/items/ed62043a6671b7529390)
——————————–
# 8月 3週目2020/08/17 [【勉強】エンジニアの学び方を考える](https://qiita.com/ymd65536/items/e1da6e947209a571523a)
——————————–
# 8月 4週目2020/08/23 [FEのノート](https:
Protocolでパラメータの型をしばる
#Protocolとダックタイピング
動的型付け言語のいいところはダックタイピングが気軽にできること。##3.7以前
“`py
def greet(o):
print(f’Hi {o.name}!’)
“`
3.7以前は引数oにnameがあることを保証するにはnameを持つ方Personを定義して、タイプヒント用いてしばる必要があった。“`py
def greet(o: Person):
print(f’Hi {o.name}!’)
“`
ただ、この関数を安全に使おうと思うとPersonを継承しなければならず、Dog型のオブジェクトをパラメータとして渡そうと思うとPersonを継承しなければならず、おかしな継承を強いられる。##3.8以降
Python3.8からProtocolが追加された。
[PEP544](https://www.python.org/dev/peps/pep-0544/)にあるように、ダックタイピングを安全に行うために便利。“`py
from typing import Protocolclass HaveName(Prot
Python3のリスト・辞書型の書き方
型について
“`
# List型
sampleA = [[name,”Sato”],[age,1]], [[name,”Mori”],[age,20]]# Dictionary型
sampleB = {“apple”:1, “orange”:2}# 型を調べる
type(sampleA)
type(sampleB)#List型からKey/Valueを取り出す
for index, value in enumerate(sampleA)#辞書型からKey/Valueを取り出す
for index, value in items(sampleA)
“`
Pytorchで新しくRNNを作るには?
研究でRNNを使う時に,デフォルトのtorch.nn.RNN()等を使うのではなくて,
自作したRNNを使用したいと思っていたのですが,やり方に結構悩んだので,備忘録的にまとめておきます.今回扱うのはデフォルトのRNNCellやLSTM,GRUなどを使ってモデルを組む段階の話ではなく,
RNNCellそのものを自作したり,内部のリンクを変更したいと思った時にどうすればいいかというお話です.結論から言ってしまえば,nn.Moduleを継承してRNNのクラスを作るだけでした.
※ゼロから作るDeep Learning 3 のp.475~477がとても参考になりました.
部分的なコードは以下のような感じです.“`python
import torch
import torch.nn as nnclass RNNCell(nn.Module):
def __init__(self,n_in,n_hid):
super(RNNCell,self).__init__()
self.i2h=nn.Linear(n_in,n_hid)
self.h2h=n
【Python】いろんな型について調べてみた!(typing)
# はじめに
python3.5 より python にも型ヒントという概念が組み込まれました。
使用するには、 組み込み型を使用するか `import typing` を使用し、型のチェックには `mypy` を使用します。# mypy について
## インストール
まず、 `mypy` を使用するためにパッケージをインストールします。“`bash
$ pip install mypy
“`## 設定ファイル
`mypy.ini` を以下のように作成し、そこに設定情報を記入します。“`:mypy.ini
[mypy]
python_version = 3.8
disallow_untyped_calls = True
disallow_untyped_defs = True
disallow_untyped_decorators = True
disallow_incomplete_defs = True
check_untyped_defs = True
pretty = True[mypy-django.*]
ignore_missing_imports
AtCoder:Python:サンプルテストをパパっとする。
以下のように記載してINPUTのところにテストケースの入力をコピペすると楽。ついでに実行時間を測れる。
“`python:test.py
import io
import sys
import time
_INPUT = “””\
#ここに入力をコピペ
“””
StartTime = time.time()
sys.stdin = io.StringIO(_INPUT)
# ——————————————————–
#ここに処理を記載
# ——————————————————–
print (“[Sec]”+str(time.time() – StartTime))
“`例:
“`python:example_ABC177_A.py
import io
import sys
import time
_INPUT = “””\
1000 15 80
“””
StartTime = time.time()
sys.stdin = i
機械学習初心者がRBMをやってみた
#初めに…
Qiita初心者投稿です。
見にくい…とかこんな内容誰でもできるわ!というのは勘弁してください…
あくまで、機械学習や人工知能の知識ゼロさんが行ったことです。(最初は、エポックって何?Accuracyって何?って状態でしたww)
#RBMとは
RBM(Restricted Boltzmann machine)
Deep Learningにおける 事前学習(Pre Training)法の一種で、良く名前を聞く AutoEncoderと双璧を為すモデルの1種です。統計力学に端を欲し、1984年~1986年にモデルが考案されました。入力を受けて出力が 決定論的(deterministic) に決まるAutoencoderとは違い、議論を確率分布の上で行える 生成モデル であるため、利便性の高いモデルとして知られています。
![スクリーンショット 2020-08-30 13.46.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/699389/dd7db155-70f5-6a13-be
【Python】競走馬の強さをレーダーチャートで可視化
#はじめに
Pythonと競馬は今年から始めたのですが、レースに出走する競走馬の強さみたいなものを一覧で可視化できたら面白そうだなーということで、今回は2020年の日本ダービーを題材に、出走馬の強さを一覧でレーダーチャートで並べるプログラムを書いてみました。
#サンプル
![日本ダービー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680218/e1d3a36c-d810-e871-a961-3f0e1ab089b2.png)
一着がコントレイル、二着がサリオスだったのですが、やはりこの二頭の強さが際立ちますね…!
#作り方
今回は各出走馬の過去5走を平均化したデータを題材としました。
カテゴリーは平均順位、速度指数最大値、速度指数平均値、速度指数中央値、5着以内率、現在の騎手の複勝率の6つとしました。
速度指数については、独自に計算したものを使っています。
また、こういうレーダーチャートを作る場合、カテゴリー毎のデータにばらつきがあると、レイアウトが崩れていくので、sklearnのMin
AtCoder Beginner Contest 177 C問題「Sum of product of pairs」解説(Python3,C++,Java)
注意)解答例はPython3のみ出来ております。C++,Javaの方は「全ての提出」からコードを見て実装することをおすすめします。
皆さんこんにちは(コンテスト後の方はこんばんは!)Ruteです!
AtCoder Beginner Contest 177 C問題の解説をこれから始めます!
A問題,C問題の解説は以下のリンクより見ることが出来ますのでご確認下さい!!##各問題の解説
|A問題|B問題|C問題|
|—|—|—|
|準備中|準備中|この記事です|#問題概要
$N$個の整数$A_1,…A_N$で構成された数列が与えられる。
$1 \leq i < j \leq N$を満たす全ての組$(i,j)$についての$A_i×A_j$の和を$mod(10^9+7)$で求めよ。 問題URL :https://atcoder.jp/contests/abc177/tasks/abc177_c ##制約 ・$2 \leq N \leq 2×10^5$ ・$0 \leq A_i \leq 10^9$ ・入力は全て整数 #解説 $A_1,...A_N$
PythonでAtCoder Beginner Contest 177 E – Coprime
# AtCoder Beginner Contest 177に参加しました
D完。E問題で詰まったので復習としてまとめをします。# [E – Coprime](https://atcoder.jp/contests/abc177/tasks/abc177_e)
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/667032/a167b076-1e53-422b-1049-f17f9ac6ab93.png)## 本番中に考えたこと
実質「pairwise coprimeをどう判定するか?」という問題。
愚直にpairwiseで判定すると当然時間がかかるので素数ベースで考えるしかない。
要するに「すべての$A_i$について素因数が全くかぶらない」ということなので、$A_i$を素因数分解して出てきたものをカウント(p_cnt[$A_i$] に+1)していけばよさそう。
例:12→2・3、16→2、35→5・7なので、2が2回以上ありpairwiseではない
p_cntの最大値が1ならpai
bootcampのeasy100をやった記録 31-40
[AtCoderProblemsのTrainingをPython3でやる Easy編](https://qiita.com/hortensia/items/364f33a7909c169cdd45)
↑これの31-40のやつです。#31.[ABC063-B Varied](https://atcoder.jp/contests/abc063/tasks/abc063_b)
各文字のcountが1以外ならnoを出せば良い。
(Yes|No)と(yes|no)みたいな部分が作問者で変わるのやりづらいので統一してほしいと思った。“`python
s=input()
t=True
for i in s:
if s.count(i) != 1:
t=False
print(“yes” if t else “no”)
“`#32.[ABC052-B Increment Decrement](https://atcoder.jp/contests/abc052/tasks/abc052_b)
N回操作しながら各xをリストにぶち込んで、最大値を取り出せば良い。
ABC177参戦記
古戦場帰りで頭がグルグルになってたのか何もわからなくなった。
もうだめだ……おしまいだ……。#[A – Don’t be late](https://atcoder.jp/contests/abc177/tasks/abc177_a)
普通。
$T×S≧D$ならYes、そうでないならNoを出せば良いですね。“`python
d,t,s=map(int,input().split())
print(“Yes” if d<=t*s else "No") ``` #[B - Substring](https://atcoder.jp/contests/abc177/tasks/abc177_b) メダパニゾーン なんかとち狂った解法にたどり着いてしまった気がする。 というかどういう考えでこのコードに至ったのか思い出せない。 ```python s=input() t=input() res=float("INF") if t in s: res=0 else: for i in range(len(s)): for j in range(len
#1 Djangoのwebアプリケーションをデプロイするまで(AWSのEC2でインスタンス構築編)
#はじめに
私はプログラミング言語の初学者です。
その為、読み間違いや理解不足の部分があると思います。
その場合はコメントで教えて頂けると幸いです。「ゴール」は事前に作成したPythonのwebアプリケーションをデプロイする所まで行きたいと思います。出来るだけ初学者向けに書くつもりです。
作成手順
* AWSのEC2でインスタンスを構築後に、SSH通信をする ←**現在はここです。**
* 構築したインスタンスの中にPythonの環境を構築する
* インスタンスの中に仮想環境を構築し、Django等をインストール(フレームワーク)
* PostgreSQLを設定する(データベース)
* インターネット上にアプリケーションが接続出来るように設定する(デプロイ前半)
* NginxとGunicornの設定する(デプロイ後半)## インスタンスの作成の仕方
###ステップ1(インスタンスの作成)
AWSのEC2を選択し、この画面に移動します。
画面右上の矢印がある所をクリックします。(ここはリージョンというものを選択する所です。)
*特にこだわりが無ければどこでもいいですが、EC
pythonコマンドでpythonはpython3.8を指す
linuxでPythonコマンドを入力するとデフォルトで指すのは/usr/bin/python2.7です。
使いやすいのため、[シンボリックリンク]を作成して、pythonコマンドはpython3を指す。
[シンボリックリンク]:https://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%95%E3%83%88%E3%83%AA%E3%83%B3%E3%82%AF##健忘症患者のメモ:head_bandage:
“`shell
#pythonのバージョンを表示
$ python -V
Python 2.7#元のシンボリックリンクを削除
$ sudo rm -rf /usr/bin/python#python関連ファイルを検索
$ whereis python
python: /usr/bin/python /usr/bin/python2.7 /usr/bin/python3.6.5 /usr/bin/python3.8.5#シンボリックリンクを作成
$ sudo ln -s /usr/bin/python3.8 /usr/bin/p
ABC177 B問題メモ Python
# 概要
– 難しく考えすぎてごちゃごちゃした実装してたらコンテスト中はWA
– Tに含まれる文字列すべてのパターンについて調べるようなやり方
– その文字列がSの何番目に含まれるかを調べていき、前後の文字列に余りがあるかを判定するなど
– 他の人の実装見てACにできたので以下にメモ# 解き方メモ
– S, Tが小さいので全探索
– 探索の仕方は以下(これが思いつかなかった)
S = ‘abcdef’
T = ‘acd’
の時、
S -> ‘abc’, ‘bcd’, ‘cde’, ‘def’
のように、Tの文字列分(今回なら3文字)の全パターンを用意。パターン数は、(Sの文字数) – (Tの文字数) + 1。
あとはTと一文字ずつ比較して、変更が必要な文字数調べるだけ。“` Python
S = str(input()) # ‘abcdef’
T = str(input()) # ‘acd’N = len(T)
s_list = []
for i in range(len(S) – N + 1):
s = S[i:i