Python3関連のことを調べてみた2023年01月19日

Python3関連のことを調べてみた2023年01月19日

paizaラーニング「さまざまな長さの配列の和 Python3編」

https://paiza.jp/works/mondai/double_roop_problems/double_roop_problems__various_row_sum

この問題、結構考えたのですが、解りませんでした。

#### 解答例
“`Python 3
n = int(input())

for _ in range(n):
k_a = [int(i) for i in input().split()]
k = k_a[0]
a = k_a[1:]
s = 0
for i in range(k):
s += a[i]
print(s)
“`

元記事を表示

Python-画像解析: Contact Analysisによる溶解過程解析

# はじめに
“Contact Analysis”を用いて物質溶解過程を解析する。
実装にはPython3のOpenCV4を用いる。

本稿では、牛乳にインスタントコーヒーを溶かす過程を解析する。
より実用に近い解析は以下の論文を参照されたい。
– H. Barrington et.al., Org. Process Res. Dev. 2022, 26, 11, 3073–3088. [DOI](https://doi.org/10.1021/acs.oprd.2c00216)

# 大まかな流れ
1. 閾値を決めて画像を2値化
2. 白黒二つの領域の境界面の割合を算出

# Pythonコード
### 流れ
“`
## インポート
import cv2
import matplotlib.pyplot as plt
“`

“`
## 画像の読み込み
filepath = “./demo/coffee1.png”
img = cv2.imread(filepath, 0) #グレースケールで読み込み

## 可視化
plt.imshow(img)
plt.show()
“`

元記事を表示

自然数ローマ数字変換 Python3

自然数とローマ数字の変換をします。
このプログラムでは、ローマ数字の規則に合わない文字列は、エラーとならずに無視して変換します。

“`romanumber.py
#!/usr/bin/python3
import sys

TABINT=[1000,900,500,400,100,90,50,40,10,9,5,4,1]
TABROMA=[“M”,”CM”,”D”,”CD”,”C”,”XC”,”L”,”XL”,”X”,”IX”,”V”,”IV”,”I”]

def toint(s):
a=0
i=0
while(s):
if (s.startswith(TABROMA[i])):
s=s.replace(TABROMA[i],”,1)
a+=TABINT[i]
else:
i+=1
if (i==len(TABROMA)):
break
return(a)

def toroman(a):
s=””
i=0
while(a!=0):
while((a//TABIN

元記事を表示

40代おっさんFastAPI、MongoDB連携メモ②

## 本記事について

この記事はプログラミング初学者の私が学んでいく中でわからない単語や概要を分かりやすくまとめたものです。
もし不正などありましたらコメントにてお知らせいただければ幸いです。

## タスクの一覧を取得する

### database.py

“`python
async def db_get_todos() -> list: # 一覧が返ってくるようにlist型を定義
todos = [] # MongoDBから返ってくるデータを受ける配列
# タスクの一覧を受け取る処理
for todo in await collection_todo.find().to_list(length=100): # lengthで最大件数を定義
todos.append(todo_serializer(todo)) # for文で展開した物をtodosに格納
return todos
“`

– `collection_todo.find()`motorのメソッド(‘find()’)
– ‘find()’はmotorのインスタンス

元記事を表示

40代おっさんFastAPI、MongoDB連携メモ①

## 本記事について

この記事はプログラミング初学者の私が学んでいく中でわからない単語や概要を分かりやすくまとめたものです。
もし不正などありましたらコメントにてお知らせいただければ幸いです。

## 環境ファイルを作る

プロジェクトの直下に`.env`を作る
次にMongoDBからConnectのパスをコピー
``部分を自分で作ったものに変える

“`
MONGO_API_KEY=mongodb+srv://XXXXXXXXXXXXX
“`

次にプロジェクトの直下に`database.py`を作る
もう1つ`schemas.py`を作る

### database.py

こちらにはMongoDBと連携する処理を書く

“`python
from decouple import config
from typing import Union # 選択肢が2つ以上の場合に使える
import motor.motor_asyncio # こちらでMongoDB連携のために使う

MONGO_API_KEY = config(‘MONGO_API_KEY’)

元記事を表示

python3、mpmathを用いて、自然対数の底eを求めるテスト

python3、mpmathを用いて、自然対数の底eを、求める

“`e.py
#!/usr/bin/python3
import mpmath
mpmath.mp.dps=10000

kaijou = 1
number = 1000
napier = mpmath.mpf(‘1.0’)

for i in range(1,number+1):
kaijou *= i;
napier += mpmath.mpf(‘1.0’) / kaijou;

print(“計算結果 e =”,end=”)
print(napier)
print(“mpmath.e =”,end=”)
print(mpmath.e)
“`

元記事を表示

Pythonチートシート – List型の使い方一覧

仕事や学習の時に役立つちょっとしたチートシートを作ってみることにしました。今回は個人的にPythonの学習で一番使う機会の多い、List型の使い方をまとめてみました。

## コレクションとコンテナについて
データ型の中でも、複数の値を束ねるための仕組みをコレクション・コンテナと呼びます。Pythonにおけるコンテナは、シーケンス・セット・ディクショナリーの3型があります。
– シーケンス – 順に並んだ値を扱う。中身の重複・異なる型をあつかえる。いわゆる配列
– セット – 順序を持たず、値の重複ができない。数学の集合に近い
– ディクショナリー – キー・値の仕組みで要素を管理する。キーは重複不可・値はOK。

## シーケンスについて
シーケンス型にはlist, tuple, range等の型があります。シーケンス型の要素には、インデックス値を使ってアクセスすることができます。

listが扱えるのはイテラブルな型で、`list(iterable)`という宣言でインスタンス化することができます。他にもリスト内包表記や、`sorted(), split()`といったメソッドがlis

元記事を表示

Linux Python3で、真の乱数を使う。

Linux Python3で、真の乱数を使う

コンピュータで使える乱数は、2種類あり、周期をもつ疑似乱数と、
統計論的に正しい真の乱数があります。

python3では、乱数の利用は主にrandomモジュールを使います。ですが、これは、
疑似乱数を発生するもので、真の乱数ではありません。

randomモジュールのrandom.seed()は、乱数発生機を初期化しますが、
osが乱数のソースを提供してくれている場合はそれを、
してくれていない場合はシステム時刻を乱数の種に使います。

Linuxでは、random.seed()で参照される乱数のソースが
/dev/urandom(疑似乱数デバイス)なので、真の乱数ではありません。

また、Linuxは、/dev/randomを提供していて、これを読み出すと、環境ノイズからの
真の乱数を得ることができます。なので、これを乱数の種に使いましょう。

乱数シードを真の乱数で初期化すると、そのモジュールで、以降それが利用されるので、
後々便利です。

ですが、なお、カーネルのバージョンが、5.6.0に満たない場合、
/dev/randomを使

元記事を表示

配列の要素数、配列の要素の表示、文字列分割

Python3で配列の要素数、配列の要素の表示、文字列分割のプログラムを実装しました

“`Python3
str = “Hello paiza”
#スペース区切りの文字列を分割する
array1 = str.split(‘ ‘)
#配列の要素数を取得する
num = len(array1)
#ループ文で表示する
for i in range(num):
print(array1[i])
“`

split関数で文字列を分割して配列に格納します。
len関数を使って配列の要素数を取得します
for文で配列の要素順に表示します。

元記事を表示

ガウス・ルジャンドル法によるπの算出 python3

ガウス・ルジャンドル法によるπの算出です。
rubyで書かれたサンプルプログラムをpythonに移植しました。
mpmathの計算桁数を1000にしてます。
πの近似値を一桁ずつ延々と無限ループで出力しますが、精度は、10000桁までチェックしました。

“`pi.py
#!/usr/bin/python3
import mpmath
import sys
k, a, b, a1, b1 = 2, 4, 1, 12, 4
mpmath.mp.dps=1000

f=0
while(True):
# Next approximation
p, q, k = k*k, 2*k+1, k+1
a, b, a1, b1 = a1, b1, p*a+q*a1, p*b+q*b1
# Print common digits
d = a / b
d1 = a1 / b1
while(d == d1):
print (int(d),end=”)
sys.stdout.flush()
if f==0:
print(“.”,end=”)

元記事を表示

python3、mpmathを使った、サンクトペテルブルグのパラドックスの独自研究

コインを表が出るまで投げ続け、投げた回数をNとすると、
2^(N-1)円もらえるとするゲームにおいて、期待値を計算すると、
無限大に発散してしまう。
W=Σk=1,∞(1/2^k・2^(k-1))=∞

これは、直感と反するので、サンクトペテルスブルグのパラドックスと呼ばれる。

一旦、コインを投げる回数の期待値Sを求め、
それから賞金の期待値(もどき)μを算出する方法(方法1)を取ってみる

S=Σk=1,∞ (1/2^k)=2
S=2なので、μ=2^(S-1)=2
故に、答えは2である。

と、いうのは誤っている。(よくある間違い)

一般に、期待値において、f(g(x))=g(f(x))は成り立たないので、
一旦、コインを投げる回数の期待値を求め、それから賞金の期待値(もどき)
を算出するのは誤っている。
しかし、これのどこが間違っているのかは解らない。
意味論的には合ってるが、数学的には間違っている

ウイリアム・フェラーも標本抽出で算出したが、期待値無限大が正解である。
ゲームの回数が有限に限られるならば、期待値は遥かに小さな値に収束する

元記事を表示

__hash__の戻り値が0固定のオブジェクトを、dictのキーにしてみる

Pythonのdictのオープンアドレス法のハッシュテーブルで実装されており、GetとSetの計算量は O(1) である。
(Pythonのdictの実装は[この](http://dsas.blog.klab.org/archives/python-dict-internal.html)記事が詳しい)
しかし、O(1) なのは異なるキーから同じハッシュ値が頻繁に生成されないことが前提である。
ここでは、全てのキーから同じハッシュ値が生成する最悪ケースで実験してみる。

“`python
import time

class BadKey:
name = ‘bad’

def __init__(self, key):
self.key = key

def __hash__(self):
return 0

def __eq__(self, o):
return self.key == o.key

def __repr__(self):
return self.key

cla

元記事を表示

手検出やジェスチャー認識で PC を操作する方法

手検出やジェスチャー認識で PC を操作することは多くの方が想像するところではないでしょうか?この場合、HID (Human Interface Device)として BLE Peripheral の実装を行いたくなります。しかしながら、私自身のように普段は別の分野の業務に従事する方や、こうした話が持ち込まれる機械学習エンジニアにとって突然 HID Over GATT を実装を行うのは骨が折れることだと思います。(マイコン向けの micro python などで記述された実装は簡単にヒットするが、デスクトップ環境の実装の記事が少なく、dbus-api として提供されるようになった bluez の背景を追うことや SerialPortProfile (SPP) の存在が私を混乱させた。)

私自身は当時 tech demo のために設けられた一週間のうちに実現できず、その後1年ほど少しずつ情報を集めて BLE マウスのエミュレートの実現に至っています。この話は別案件においても応用が効くように思うので、私の実装の公開を行い、この記事では実装を修正するための要所を記載しようと思います。(去年

元記事を表示

jax/flaxのインストール時のトラブルメモ

# インストール

GPUを使う時はpipインストール時に指定しなければいけない

“`
pip install –upgrade “jax[cuda]” -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html
“`

実際にはcudnnのバージョンに合わせてバージョン指定したほうがいい(後述)

“`
pip install “jax[cuda11_cudnn86]” -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html
pip install “jax[cuda11_cudnn82]” -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html
“`

# バージョンについて

cudnnバージョンは環境のcudnnのメジャーバージョンは合わせなければいけない
マイナーバージョンは環境のcudnnよりも古いjaxをインストー

元記事を表示

Pythonの2の補数変換

文字列に変換したくなかったので以下

“`Python
def tc(x, bits):
if x > bits>>1:
x = ~(x ^ bits)
return x
“`

#### ex. 4ビット
“`Python
>>> tc(7, 0xF)
7
>>> tc(8, 0xF)
-8
>>> tc(0xF, 0xF)
-1
“`

#### ex. 16ビット
“`Python
>>> tc(32768, 0xFFFF)
-32768
>>> tc(32767, 0xFFFF)
32767
“`

元記事を表示

ラズパイをpython2からpython3に変更する方法

## (1)pythonのバージョンを確認
*現在のバージョンはpython2系であることを確認
“`
$ python -V
python2.7.0
“`
## (2)シンボリックリンク確認
“`
$ cd /usr/bin
“`
“`
$ ls -l | grep python
rwxrwxrwx 1 root root 10 Oct 4 2022 python -> python2
“`
## (3)シンボリックリンク削除
“`
$ cd /usr/bin
“`
“`
$ sudo unlink python
“`
## (4)シンボリックリンク作成
“`
$ cd /usr/bin
“`
“`
$ sudo ln -s pytohn3 python
“`
## (5)再度シンボリックリンク確認
“`
$ cd /usr/bin
“`
“`
$ ls -l | grep python
rwxrwxrwx 1 root root 10 Oct 4 2022 python -> python3
“`
## (6)再度pytho

元記事を表示

Pythonでもeval/exec is evil

# はじめに

eval関数およびexec関数はPythonの組み込み関数で、詳細はさておき文字列をコードとして実行することができます。同様の関数はインタプリタ方式の言語に広く用意されており、私が知っている限りではJavaScriptやRubyに搭載されています。

しかし、この関数はほとんどの場合で利用すべきではありません。一般的に**eval is evil**といわれています。Pythonでも例外ではないはずです。

# 利用例その1

ユーザーから入力された文字列を加工してprint関数で表示する関数を考えます。

“`python
import sys
input = sys.stdin.readline().rstrip()

exec(f”””
def print_input():
print(f’★{input}★’)
“””)

print_input()
“`

“`
> python print_input.py
入力しました!
★入力しました!★
“`

evalを使用したこのコードは、**とても危険**です。たとえば、入力が以下のような文字列だ

元記事を表示

データ分析で使うコード (データ扱い編)

個人的に使うものを厳選して残しておきます。

### データのインポート

Pandasのread_csvは、CSVファイルを読み込むための関数です。

“`Python
import pandas as pd
df = pd.read_csv(‘home/hoge.csv’)
“`
“`Python
import pandas as pd
# デフォルトの区切り文字はコンマ。
# スペース区切りの場合は sep 引数を使用する。
df = pd.read_csv(‘home/hoge.csv’, sep=’ ‘)

# 自動的に最上行のデータをヘッダーにしたくない場合
df = pd.read_csv(‘home/hoge.csv’, header=None)

# ヘッダーに使用する列名を指定するとき
df = pd.read_csv(‘home/hoge.csv’, names=[‘A’, ‘B’, ‘C’])

# 読み込む列を指定したいとき
df = pd.read_csv(‘home/hoge.csv’, usecols=[0, 1, 2])
“`
### データの

元記事を表示

[環境構築]簡単にDockerでJupyter Labを立ち上げる

#### まず、Dockerfileを作成します
“`Dockerfile
# Dockerfile
FROM jupyter/base-notebook

USER root

RUN pip install -y pandas numpy

RUN pip install jupyterlab

USER jovyan
“`
– pipを実行するために、USER rootを書きます
– Jupyter Labを起動するために、USER jovyanを書きます(jovyanはJupyter Labのデフォルトユーザー)

#### Jupyter Labのイメージを作成します (Dockerfileのディレクトリに遷移する必要)

“`bash
docker build -t my-jupyter-lab .
“`
– my-jupyter-labじゃなくても好きに命名していいです
– . は Dockerfileのあるディレクトリです

#### Jupyter Labを起動します

“`bash
docker run -p 8889:8888 -v “$PWD”:/

元記事を表示

Pythonでの音声信号処理 (6) ダミーデータを鳴らす

## やりたいこと
ダミーデータを鳴らすこと

## やってみた
音といえば、A(ラ)の音を使うことが多いようなので、A = 440 Hz で試してみる。

“`p6.py
# -*- coding: utf-8 -*-
import sys
sys.dont_write_bytecode = True

from pydub import AudioSegment
from pydub.playback import play
import Dummy as dmy

def main():

smpl = 44100 # サンプリングレートは44.1kHz
sec = 2 # 2秒分

wavA = dmy.makeWave(440, smpl, sec, 32, 0, 1)

aud = AudioSegment(
wavA.astype(“int8”).tobytes(),
sample_width=1,
frame_rate=smpl,

元記事を表示

OTHERカテゴリの最新記事