- 0.0.1. Pythonでの音声信号処理 (8) 波の解析の一歩
- 0.0.2. Pythonでの音声信号処理 (7) 色々なデータを鳴らす
- 0.0.3. nlplotの共起ネットワークで遊んでみた
- 0.0.4. [Python]Classモジュールの中でimport_moduleを利用して処理タイプ毎に動的にモジュールを読み込み実行する
- 0.0.5. 【Python】gpt-indexのsave_to_disk関数でTypeError: Object of type float32 is not JSON serializableになったときの対処
- 0.0.6. Python 逆ポーランド記法の電卓
- 0.0.7. Pythonにおける組み込み型の種類
- 0.0.8. 【python】行列で連立一次方程式を解く
- 0.0.9. 〈Kivy〉シングルタップ・ダブルタップで別の動作をするボタンを作る
- 0.0.10. InfluxDB v2: Python Client の使い方 (時系列データ)
- 0.0.11. Raspberry PI上のPython-slimコンテナ(Debianベース)でrustc依存のパッケージ構築に苦労した話
- 1. 前提条件
- 2. 経緯
- 2.1. 出てきたエラー
- 2.1.1. OpenCVの解像度設定は1度出来なかったからと言って諦めてはいけない(戒め)
- 2.1.2. paizaラーニング「さまざまな長さの配列の和 Python3編」
- 2.1.3. Python-画像解析: Contact Analysisによる溶解過程解析
- 2.1.4. 自然数ローマ数字変換 Python3
- 2.1.5. 40代おっさんFastAPI、MongoDB連携メモ②
- 2.1.6. 40代おっさんFastAPI、MongoDB連携メモ①
- 2.1.7. python3、mpmathを用いて、自然対数の底eを求めるテスト
- 2.1.8. Pythonチートシート – List型の使い方一覧
- 2.1.9. Linux Python3で、真の乱数を使う。
- 2.1. 出てきたエラー
Pythonでの音声信号処理 (8) 波の解析の一歩
## やりたいこと
波形データを解析するための理屈的な側面を整理すること## やってみた
### 波形データの一般形
波のデータは、色々なsin波を合成したもの。
sin波といっても、大きさが違うもの、周波数が違うもの、ちょっと横にズレた(いわゆる位相が違う)ものなどがある。位相がずれたsin波は、sinとcosの和で表現できる。
つまり、
sin(x + φ) = A・sin(x) + B・cos(x)
のように書くことができる。このことから、どんな波形データも、
F = (a1・sin(x) + b1・cos(x)) + (a2・sin(2x) + b2・cos(2x)) + ・・・
のような形で表現できる。### やりたい解析
sin(2x)の「2」の部分は、いわゆる周波数。なので、a2・sin(2x)でのa2は、「2」の周波数がどれくらいの大きさで入っているかということ。
つまり、波 F に対して、a1、b1、a2、b2、・・・が分かれば、波に含まれている、それぞれの周波数の大きさが分かるということになる。まずは、この a1、b1、a2、b2、・・・を算出
Pythonでの音声信号処理 (7) 色々なデータを鳴らす
## やりたいこと
ノコギリ波や矩形波などを鳴らしてみる
## やってみた
### ノコギリ波
#### ノコギリ波の再生
“`p7_1.py
# -*- coding: utf-8 -*-
import sys
sys.dont_write_bytecode = Truefrom multiprocessing import Process
import time
from pydub import AudioSegment
from pydub.playback import playfrom Grp import Line
import Dummy as dmydef main():
smpl = 44100 # サンプリングレートは44.1KHz
sec = 1 # 1秒分# ノコギリ波
wav1 = dmy.makeWave(1, smpl, sec, 0, 0, 1)
for i in range(64):
freq = i + 1
wav1 += dmy.makeW
nlplotの共起ネットワークで遊んでみた
# この記事はなに?
前から「共起ネットワークで遊んでみたいな〜」と思っていて、実際に色々遊んでみた記録です。
# 環境構築
mecabなどのインストールは下記。
“`
echo “mecab-python3==1.0.5
nlplot==1.4.0
pandas==1.4.3
beautifulsoup4==4.11.1” > pipfile
pip install -r pipfile
“`
beautifulsoup4はhtmlからテキストを抽出するのに使用してるだけなので、必要ない人はなくても大丈夫です。# 実装
詳細は省きますが、こんな感じで実装してます・* mecabにない単語は、前後の単語を組み合わせてプログラム側で単語として判断するようにしている
* 名詞、動詞、形容詞を抽出対象に設定
* 名詞、動詞については無視する単語も設定(する、ある、いる、など)
* 単語の名寄せをしている(ざまあとざまぁがあったら、全てざまぁに寄せるなど)
* 個々の分析について共起が何回発生したかを見てplotに表示するかどうかを判断している# 例1: 概要を把握する
[Python]Classモジュールの中でimport_moduleを利用して処理タイプ毎に動的にモジュールを読み込み実行する
# やりたいこと
Classモジュールの中に処理タイプ毎のモジュールを用意しておき動的に読み込み実行する
## Code
動作確認環境: Python 3.7.10
“`
test.py
test_class/
├ __init__.py
└ func/
├ hoge.py
└ fuga.py
“`“`python:test_class/__init__.py
from importlib import import_moduleclass test_class():
def __init__(self, func_type):
self.func = import_module(f”.func.{func_type}”, “test_class”)def exec(self):
self.func.main(‘test message’h)
“`
Classの中ではimport_moduleを利用して動的にモジュールを読み込む
この時import_moduleはtest_classモジュールからの相対PAT
【Python】gpt-indexのsave_to_disk関数でTypeError: Object of type float32 is not JSON serializableになったときの対処
# はじめに
[GPT Index でのHuggingFaceの埋め込みモデルの利用 | npaka](https://note.com/npaka/n/nee11eb7e620e)にしたがって作ったindexをsave_to_diskで保存しようとしたときに以下のエラーが出ました。対応方法を考えます。“`Python
index.save_to_disk(“index.json”)
“`“`
TypeError: Object of type float32 is not JSON serializable
“`# 環境
“`
% pip list | grep gpt-index
gpt-index 0.2.3
% python -V
Python 3.10.2
“`
(gpt-indexの更新が非常に活発(記事投稿日2023/1/20時点での最新が0.2.8)なので、すぐにout-datedな情報になるかもしれません。)# 解決方法
## 保存
save_to_disk関数の内部で辞書を`json.dump`に渡す処
Python 逆ポーランド記法の電卓
逆ポーランド記法(Reverse Polish Notation;RPN)の電卓です。
chmod +x revp.pyで実行権を付けて動かして下さい。
引数の式はコマンドラインに、`revp.py 10 20 +`のように、スペースで区切って入力して下さい。
エラーチェックはしてませんので、誤った文字列を渡すと、pythonがエラーを返します。“`revp.py
#!/usr/bin/python3
import sys
stack=[]
s=sys.argv[1:]while(s):
e=s[0]
if (e==’+’):
stack.append(stack.pop()+stack.pop())
elif (e==’-‘):
a=stack.pop()
stack.append(stack.pop()-a)
elif (e==’*’):
stack.append(stack.pop()*stack.pop())
elif (e==’/’):
a=stack.pop()
stack.append(sta
Pythonにおける組み込み型の種類
# はじめに
近年の静的型付け言語の流行に伴い、Pythonでコードを書く際に静的型付け言語のように型安全な書き方を記載することが求められるようになってきました。実際にPython3においてversionが上がる度に型ヒントに関する機能が充実するようになってきました。
今回はPythonにおける型の種類をまとめました。
※因みにPythonはすべてがオブジェクトなので、Pythonにおける型とはオブジェクトの種類(type)のこと。ここではtype()の戻り値のクラスを型と呼びます。Python実行環境は Python 3.9.6
# Pythonに備わっている組み込み型(Built-in Types)
組み込み型は主に下記が存在します。(公式ドキュメントから抜粋)
1, 数値型(整数、浮動小数、複素数)
2, シーケンス(リスト、タプル、rangeオブジェクト)
3, テキストシーケンス(文字列)
4, 集合型(set, frozenset)
5, マッピング(辞書)
6, バイナリシーケンス
7, クラス、インスタンス、および例外
※6,7は今回は扱わない。## 1,
【python】行列で連立一次方程式を解く
## 概要
pythonで行列計算をすることが多いので、備忘録として残しておくことにいたしました。まだまだ至らないところがたくさんあると思いますが、皆様何卒よろしくお願い申し上げます。
## 環境
macOS 13.1
conda 22.9.0
Python 3.9.13
numpy 1.21.5
### 単位行列の積
まず単位行列を用いて、正しく計算が行われているかを確認してみます。“`python
import numpy as np
mat_1 = np.matrix([[0, 1], [2, 3]])
i = np.eye(2) #iは単位行列mat_2 = np.dot(mat_1,i)
mat_3 = np.dot(i,mat_1)print(mat_2)
print(mat_3)”’
実行結果
[[0 1]
[2 3]]
[[0 1]
[2 3]]
”’
“`:::note info
単位行列をかけているので、mat_2,mat_3ともにmat_1と等しくなっていることが確認できます。
:::### 逆行列を求める
次に逆行列につい
〈Kivy〉シングルタップ・ダブルタップで別の動作をするボタンを作る
# 目標
こんなふうに, シングルタップとダブルタップで別の動作をするボタンを作成する.
具体的には, シングルタップで「+1」, ダブルタップで「数字を 0 に戻す」動作を行うボタンを実装する.# サンプルコード(ダブルタップ実装前)
左のボタンを押すと表示された数値に +1, 右のボタンを押すと表示された数値に +2 するシンプルなボタン.
これを修正してダブルタップ処理を追加する.
以下にコードを記載する.## 1. double_t
InfluxDB v2: Python Client の使い方 (時系列データ)
## 準備
トークンを調べる“`bash
influx auth list
“`バケットの作成 (dbtest というバケットを作成)
“`bash
influx bucket create -n dbtest -r 72h
“`バケットの削除
“`bash
influx bucket delete -n dbtest
“`バケットの一覧
“`bash
influx bucket list
“`## データの書き込み
“`py:write_temperature.py
#! /usr/bin/python
#
# write_temperature.py
#
# Jan/19/2023
#
# ——————————————————————
import sys
import json
import requests
import time
# —————————————————
Raspberry PI上のPython-slimコンテナ(Debianベース)でrustc依存のパッケージ構築に苦労した話
初投稿です.今後よろしくお願いします.
ある研究案件でRaspberry PI上のPythonのslimコンテナ(執筆時python:3.9-slim)にpip経由で色々入れようとしたところいろいろ躓いたのでメモ
Debianのaptで入るrustが古かったり,Dockerfile内でのPATH変数の更新などで一苦労しました
最後に書きますが,今のところこの方法じゃない方がよいかもです.前提条件
OS: Rasbian( on Raspberrypi4 )
Docker及びDocker-composeをapt経由でインストール
Dockerfile内にpip経由でbcryptを含むいくつか(主にFlask関係)をインストールする文を書いた
ベースコンテナはpython:3.9-slim経緯
面倒な方は結論だけどうぞ
出てきたエラー
~~~Dockerfile
From: python:3.9-slim
…..
RUN
OpenCVの解像度設定は1度出来なかったからと言って諦めてはいけない(戒め)
# 背景
産業用のMV-CE050-30UCというUSB3のカメラでOpenCVによる画像処理を行いたかった。
デフォルトで対応していないと思い込んでいろいろ試行錯誤した後、
非常に簡単に対応させる手順が用意されていた。
なんとかOpenCVで画像が出て喜んだものの解像度が640 x 480。最大解像度まで上げたい。
メーカー標準のビューワーやGraphEditでは解像度変更は可能だった。
最大解像度は2592 x 1944、設定間隔は横16、縦2ずつの模様。
設定ファイル的なものは見つからず、どうやらプログラムから変更するしかないようだが・・・# 実行環境
| モジュール | Ver | 備考 |
|:-:|:-:|:-:|
| python | 3.10.0 | |
| opencv-python | 4.7.0.68 | |
| numpy | 1.24.1 | opencv-pythonインストール時に自動でインストールされたもの |
| MVS | 3.1.0 |MV-CE050-30UCのデバイスドライバのインストールとユーティリティ|#
paizaラーニング「さまざまな長さの配列の和 Python3編」
https://paiza.jp/works/mondai/double_roop_problems/double_roop_problems__various_row_sum
この問題、結構考えたのですが、解りませんでした。
#### 解答例
“`Python:Python3
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
自然数とローマ数字の変換をします。
ローマ数字から自然数への変換の関数はエラーチェックをしませんが、正しいローマ数字を入力すれば正しく変換されます。試作品Ver0.8です。
“`romanumber.py
#!/usr/bin/python3
import sysTABINT=[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!
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=10000kaijou = 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を使