Python3関連のことを調べてみた2022年07月14日

Python3関連のことを調べてみた2022年07月14日

【備忘録】【Python 】処理の高速化のための知識

* **ベクトルプログラミングによる高速化**
配列の各要素に対して同じ処理を行う場合,
“`python
for x in range(100): x ** 2
“`
のようにfor文を回すより,
“`python
import numpy as np
np.arange(100) **2
“`
のようにベクトル的に処理したほうが速いらしい.
参照元↓

https://stackoverflow.com/questions/10698858/built-in-range-or-numpy-arange-which-is-more-efficient

*

元記事を表示

[AtCoder]Python3でAtCoder水色になるまでに知っておいた方が良いこと

# 目的
AtCoderをPythonを用いて解答する場合、知っておいて方がいいルールや事前に用意しておいた方がいい関数などをまとめました。AtCoderやPython初心者~緑色の方を対象に記述しています。
知らない知識がないか流し読みできるよう簡単に書いています。
もし気になる部分があれば詳細は検索してください。

# 前提知識
Python3は実行速度が遅いためPyPy3で提出しましょう。
また提出時にPyPy3になっていることを確認しましょう。

# 用意しておくと便利な関数まとめ
## アルファベットのリスト
アルファベットの文字列を扱う問題が頻出します。
asciiコードを用いるのが妥当かと思われますが、最初のうちは以下のリストをコピペで使用するのが簡単です。
~~~Python3
#文字列リスト
SAL = [“a”,”b”,”c”,”d”,”e”,”f”,”g”,”h”,”i”,”j”,”k”,”l”,”m”,”n”,”o”,”p”,”q”,”r”,”s”,”t”,”u”,”v”,”w”,”x”,”y”,”z”]
LAL = [“A”,”B”,”C”,”D”,”E”,”

元記事を表示

ONNX備忘録

本記事ではディープラーニングの領域で耳にすることの多い**ONNX**について、内容についてのまとめと検証を行なっていこうと思います。
本記事ではディープラーニングのモデルをONNX形式に変換した際の推論速度向上にフォーカスしており、Rasberry PiなどのエッジAIの領域で推論速度の要件を満たすための選択肢の1つとして、読者の方の参考になればと思います。

# ONNXについて

ONNXは**Open Neural Network eXchange**の略で、DeepLearningモデルを様々なフレームワーク間で交換するためのフォーマットです。読み方は**オニキス**です。

Tensorflowを用いて学習させたモデルをpytorchで推論させる際にモデルをそのまま用いることはできませんが、モデルをONNX形式に変換すれば可能となります。
今回の記事では、このフォーマットの互換性ではなく、ONNX形式でモデルを推論させた際の**推論速度の向上**と、副次作用としての**精度の劣化**について主にまとめます。
![image.png](https://qiita-image

元記事を表示

tkinterを使用して、動画にエフェクトをかけてみた。

## 目的
pythonのtkinter用いてGUIを操作し、動画にエフェクトをかけて再生します。

## 実行環境
Python version: 3.9.13
OS: Windows 10

## GUIイメージ
動画ファイルを読み込んで、サイズを枠に合わせて縮小し、左のキャンバス上に映し出します。再生、停止、最初に戻る、閉じるボタンを作っています。エフェクトは、ttk.Comboboxを使って選択します。

![ャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176158/419734da-e45d-e023-caae-a9d511e5a3fa.png)

## プログラム
動画ファイルを読み込むと、threadingがstartします。threadingは、main_thread_func関数内のwhileをループしています。ボタンを押すと、フラグが立ち、フレームを読み出し動画を再生します。Comboboxで設定したエフェクトは、“`effect_image“`の関数で処理されます。
`

元記事を表示

Pythonでランダムに生成した整数を足し合わせて特定の数にするときの備忘録

# 概要
– あるテストをするのにレコード数1000のCSVを作りたい
– ただし、ランダムに生成した整数を(1000レコード分)足し合わせたときに特定の数(今回は`32767`)にしなければならない

# 実装1
“`python
import random

def gen_int():

comb = []
for i in range(1,1001):
next_max_value = 32766-sum(comb)
if next_max_value == 0:
comb.append(0)
else:
comb.append(random.randint(0,next_max_value))

“`
こういう風に書けば、1000レコード分足し合わせたときに32767になるのだが、、、中身を確認してみると途中から全部`0`になっていてデータとして使い物にならなそう。

“`csvs:csv
27560
3412
1513
100
169
6
3
2
0
0
0

元記事を表示

VOICEVOXのAPIからリップシンク用のlabファイルを生成

GUIには機能があるが、API経由での機能が見つからなかったので。

“`python
def get_labdata(jsondata):
labdata=””
now_length=0
timescale = 10000000/float(jsondata[“speedScale”])
for i in jsondata[“accent_phrases”]:
for j in i[“moras”]:
if j[“consonant_length”] is not None:
labdata += str(int(now_length*timescale)) + ” ”
now_length += j[“consonant_length”]
labdata += str(int(now_length*timescale)) + ” ” + j[“consonant”] + “\n”
labdata += str(int(now_length*ti

元記事を表示

tweepyで自動フォロー

タグを拾いフォロー状態で条件分岐させるコードを書きます。
まずKeys.pyにトークン類をまとめて書きます。
“`python
import tweepy

class Apikeys:
CK = ” # Consumer API key
CKS = ” # Consumer API Secret key
AT = ” # Access token
ATS = ” # Access token secret
auth = tweepy.OAuthHandler(CK, CKS)
auth.set_access_token(AT, ATS)
api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)

“`
follow.pyも書きましょう。
“`python
import time
import tweepy
from keys import Apikeys

api = Apikeys.

元記事を表示

werkzeug.securityでハッシュ化

werkzeug.securityでハッシュ化するコードを見て、
意味を理解したくて調べた内容を記載します。

前提として全然理解できなかったです。

## werkzeug.securityの基本的な使い方

generate_password_hash関数でハッシュ化できて、
check_password_hash関数で元の文字列と同じかを判定できます。

generate_password_hashで作成されるハッシュは毎回違うものになっているので、
作られて2つのハッシュを比較してもFalseになります。

なので元の文字列と同じかを判定するためにはcheck_password_hashを使う必要があります。

“`py
from werkzeug.security import generate_password_hash, check_password_hash

hash1 = generate_password_hash(‘hogehoge’)
hash2 = generate_password_hash(‘hogehoge’)

print(hash1) # p

元記事を表示

Pythonでつくる対話システム_備忘録_Part01

# はじめに
現在は対話ロボットの研究に取り組んでいるが,対話システムを1から自分で実装できるようにするための勉強を始めようと思い,[『Pythonでつくる対話システム』](https://www.ohmsha.co.jp/book/9784274224799/)に取り組む.

# 環境
macOS: Big Sur(バージョン 11.6.7)
言語: Python 3.9.6
メッセンジャーアプリ: [Telegram](https://telegram.org/)

# 第一章 対話システムを作るにあたって
[『Pythonでつくる対話システム』ソースコード&データ配布とサポートページ](https://github.com/dsbook/dsbook)から必要なコードをダウンロードして動かす.

1. Telegramのインストール
1. Telegram上でBotの作成
1. アクセストークンを取得
1. telegram_bot.pyに取得したアクセストークンを貼り付け
1. echo_system.py(おうむ返しをするプログラム)を起動
1. エラーの修正
サンプルコード

元記事を表示

TkinterでGIFを動かす

# 考察

– tkinterのPhotoImageで読み込むと残像がでる
– PillowのImageで開いた状態でseekしてImageTk.PhotoImageで読み込むと残像がでない

検証してないのではっきりしていませんが、残像っていうのは、たぶん、フレームの取りこぼし

#

以下、

[while方式](#while方式)
[コールバック方式](#コールバック方式)

の例を示します

おすすめは`コールバック方式`です

# While方式

init時にGIFのフレームを読み込む。EOFERrrorまたはExecptionとなったら全フームの読み込みが完了したことになる。

load_frameのやり方は2通りあって、1は残像はでず、2は残像がでる

“`python
from PIL import Image, ImageTk
import tkinter as tk
from time import sleep
import threading

class GifPlayer(threading.Thread):
def __init__(

元記事を表示

TypeHintがPythonの高速化に貢献していくとよいな

結論から述べると、mypycに、効果的な高速化への期待は難しいんじゃないかと思う。

ですが、シームレスに少しは早くなるのは、ecosystem的には良いことかと思います。

ただ、既にCythonが進んでいる。そのため、mypycとCythonが重複した選択肢となる。なんとか協調してより開発を進めて頂きたい。

—-

残念ながら、TypeHintを付記するだけで高速化しない(2022.07現在)。期待された人は多いかと思うが(私もその一人)。

しかし、C言語へトランスコードして高速化するmypycが開発がされています。
– https://github.com/mypyc/mypyc

mypycの名前でお察しの方/既知の方いらっしゃるとおもいますが、MyPyプラグインと協調して行くスタイルのようです。

メリット
1. C言語化に必要な型を指定を、デフォルト`typing`の型で指定できる。
1. つまり、TypeHintを付記する、と、その型に基づいてC言語化の際の型指定ができ、後付で型指定が不要。
1. 標準化しつつ有るMyPyで型付けされたコードを、Py->

元記事を表示

Pythonで黒歴史晒して優勝する。

## あらすじ
今の会社に就職する前、趣味でクソアプリの製作に励んでいたことがあります。ワンちゃんの犬種を当てるクイズアプリです。
https://dachs.herokuapp.com/
具体的にどのようにクソか説明しますと、

– JavaScriptを使って画像に対してonClickイベントで実装しており、正解でも不正解でも次の画像に送られない。(画像と問題が合っていない)
– 画像サイズの変更がされていないため犬種によって出題の画像サイズがまちまち。
– herokuの無料枠でデプロイされており動作が重い。
– 「サルーキ」と「ボルゾイ」、「フレンチブル」と「ボストンテリア」、「ラフコリー」と「シェルティ」のように画像からの判別が困難なものが含まれている。

過去の黒歴史と決別すべく、救済策を講じようと思い立ちました。

## 具体策
Pythonを使って正解になっている犬種のワンちゃんの画像をスクレイピングします。
クソアプリの方は誰からも見向きもされませんが、スクレイピングは多くの方の役に立ちます。
読んでくださった方の一助となれば幸いです。
(今回はビーグルを例に挙げて

元記事を表示

【Python】Flask HTTPメソッド4種

## はじめに
pythonでHTTPメソッドを扱う方法についてまとめていきます.
FlaskでREST APIを作成する際にはよく使う記述をまとめました.
初学者の方の参考になればと思います!

## HTTPメソッドについて
HTTP ver1.1でのメソッド一覧は以下の通りです.

### GET
URIで指定した情報を要求する.
URIがファイル名の場合はそのファイルの中身を,プログラム名の場合はプログラムの出力を返す.

### HEAD
GETと同様の処理だが,HTTPヘッダのみを返す.

### POST
クライアントからデータを(名前と値)のセットで渡す.
使用例:フォームデータを送る時

### OPTIONS
通信オプションの通知等.

### TRACE
サーバが受け取った要求行とヘッダ行をそのまま送り返す.

### DELETE
URIで指定したサーバ上のファイルを削除する.

### PUT
URIで指定したサーバ上のファイルを置き換える.

### PATCH (Appendix)
PUTと同様の処理だが,差分のみを置き換える

### LINK (App

元記事を表示

pythonの文字列操作

python3を久しぶりに使ったらかなり忘れていたので、よく使うコードをメモとして残します。

# 文字コード変換

|目的|コード|結果|
|:–|:–|:–|
|1文字を、10進数に変換|ord(‘a’)
ord(‘あ’)|97
12354|
|10進数を、1文字に変換|chr(97)
ord(12354)|’a’
‘あ’|

# 文字列-数値変換、数値判定

|目的|コード|結果|備考|
|:–|:–|:–|:–|
|数値を、10進数で書かれた文字に変換|str(97)|’97’||
|数値を、16進数で書かれた文字に変換|hex(97)|’0x61’|0xが追加される|
|数値を、2進数で書かれた文字に変換|bin(97)|’0b1100001’|0bが追加される|
|10進数で書かれた文字を、数値に変換|int(’97’)|97||
|16進数で書かれた文字を、数値に変換|int(’61’,16)
eval(‘0x61’)|97
97|
evalで式を評価する|
|16進数で書かれた文字を、数値に変換|int(‘1100

元記事を表示

【Django】アプリ別にurls.pyを分ける方法

Djangoで開発している時にアプリが多くなると、1つのurls.pyに各ルーティングを記載していくとコードが多くなってしまいます。

この改善策として、各アプリのディレクトリにurls.pyを配置し、アプリ内のルーティングは、対象ディレクトリ内のurls.pyを使用することでルーティングを整備することができます。

そのやり方を以下に記載します

## プロジェクトのurls.py

django-admin startprojectにて、作成された最初のurls.pyは、以下のように記載します

“`python
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
path(‘admin/’, admin.site.urls),
path(‘myapp/’, include(‘myapp.urls’)),
]
“`

from django.urls import pathにincludeを記載します

urlpatterns内には、sta

元記事を表示

VOICEVOXに英語を読ませる(カタカナ英語)

VOICEVOXは英語の発音ができないが、さすがに「Cisco」を「シーアイエスシーオー」と発音するのはさすがに困る。とはいえ、膨大な単語1つずつを辞書化していくのは骨が折れる。

ということで、多少妥協して、片言でも良いので発音してもらう。
とりあえず、英単語をカタカナに変える辞書を用意。
[bep-eng.dic](https://fastapi.metacpan.org/source/MASH/Lingua-JA-Yomi-0.01/lib/Lingua/JA/bep-eng.dic)あたりをベースに、自分好みの単語を追加すれば良いんじゃないかな。

“`
[root@ip-10-100-0-11 app]# tail eng.dic
PYTORCH パイトーチ
TWITTER ツイッター
SAAS サーズ
KAGGLE カグル
DROPBOX ドロップボックス
SPLUNK スプランク
SALESFORCE セールスフォース
DREAMS ドリームズ
AZURE アジュール
LEADERS リーダーズ
[root@ip-10-100-0-11 app]#
“`

先のリスト

元記事を表示

parlaiとweb apiのように会話したい

いろんなbotを作って遊んでいるが、pariaiがやはり凄いので、もっと遊びたい。
parlai(Blenderbot2)にはインタラクティブなインタフェースが用意されている。

“`
Enter Your Message: What is your hobby?
/opt/conda/lib/python3.10/site-packages/parlai/core/torch_generator_agent.py:1728: UserWarning: __floordiv__ is deprecated, and its behavior will change in a future version of pytorch. It currently rounds toward 0 (like the ‘trunc’ function NOT ‘floor’). This results in incorrect rounding for negative values. To keep the current behavior, use torch.div(a, b, ro

元記事を表示

Python JSONデータをTreeViewで表示してみた。

JSONデータで情報を受信していると、受信したJSONデータそのものをリアルタイムでそのまま表示させたいことがままあります。
json.dumpsメソッドにindent指定して、テキスト表示すれば、きれいに改行して表示すことが簡単にできます。
しかし、大量のJSONデータが全て展開されていると、所望のデータにたどり着くまでスクロールすることになります。あるいはエディタに展開して検索ですね。

TreeViewで閉じられた状態のほうが便利かなと思い、今回のコードを作りました。

# データ準備

記事のために利用させていただいたJSONデータは、以下のサイトです。
[京都市オープンデータポータルサイト](https://data.city.kyoto.lg.jp/riyou/api)

リクエストURLの例
https://data.city.kyoto.lg.jp/API/action/datastore/search.json?resource_id=f14b57c2-48dd-4aa7-b754-a4f4ac340f2d

WEBブラウザのURLにリクエスト例を入力すると、JSON

元記事を表示

[Python, tkinter]画像ファイルをGUIで削除

# Pythonのtkinterを用いて画像ファイルをGUIで削除
– 機械学習のデータセット作成の際など, データセットに相応しくない画像を削除するのに使用できます。

## 実装
– **python**
– 使用ライブラリ
– **tkinter** : GUIのプログラムを作るのに使用
– **Pillow** : 画像を扱うのに使用

## 使い方
1. [リポジトリ](https://github.com/yarakigit/rm_img_GUI.git)をクローン

~~~ zsh
$ git clone https://github.com/yarakigit/rm_img_GUI.git
~~~

1. ライブラリをインストール
~~~zsh
$ pip install -r requirements.txt
~~~
2. 実行
– **in_dir** : 削除したい画像があるディレクトリのフルパス
– **img_type** : 画像の種類
~~~zsh
$ python main

元記事を表示

Herokuでリダイレクトする方法(Python3・Flask)

# TL;DR
– Herokuでは`.htaccess`によるリダイレクトが動作しなかった。
– `flask.redirect`を使ってゴリ押しする。

# `.htaccess`について(不可)
[[Heroku]herokuでhttpでのアクセスをhttpsへリダイレクトさせる設定](http://kayakuguri.github.io/blog/2015/03/03/heroku-force-https/ “[heroku]herokuでhttpでのアクセスをhttpsへリダイレクトさせる設定 – KayaMemo”)など、複数のサイトを参考に以下のように作成・アップロードした。
“`.htaccess
# リダイレクトを設定する宣言
RewriteEngine on
# X-Forwarded-Protoが設定されているときに作動
RewriteCond %{HTTP:X-Forwarded-Proto} ^http$
# HOST,URIを指定して転送
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L

元記事を表示

OTHERカテゴリの最新記事