Python関連のことを調べてみた

Python関連のことを調べてみた

Optunaの探索結果をJSON形式で保存する方法

# 初めに
 機械学習モデルのハイパーパラメータチューニングを効率化するために、Optunaは非常に有用なライブラリです。この記事では、具体的な例を用いてOptunaの探索結果をJSON形式で保存する方法を紹介します!
# Optunaの基本的な使い方
 まず、Optunaの基本的な使い方を簡単に紹介します。ここでは、シンプルな最小化問題を解決するためにOptunaを使用する例を示します。
## 例: シンプルな最小化問題
 以下のコードは、$f(x) = (x – 2)^2$という関数を最小化するためのOptunaの使用例です。
“`python
import optuna

# 目的関数の定義
def objective(trial):
x = trial.suggest_uniform(‘x’, -10, 10)
return (x – 2) ** 2

# スタディの作成
study = optuna.create_study(direction=’minimize’)
study.optimize(objective, n_tr

元記事を表示

roslaunchとnodeの役割の関係性

 はじめに
=
Roboticsを扱うにあたってC++は避けて通れない道ですが、私自身まだまだ初学者であり、nodeもpythonに置き換えたいな……と密かに企んでいる中でふとscriptsとnodeの違いはなんだ??と疑問に思いました。また、roslaunchを行うにあたって影響はないのか疑問に思ったので誰得?って感じですが(自分のために)まとめてみます。

Nodeファイルの役割
=
Nodeファイルの役割は、特定の用途が定められているわけではありませんが、Nodeを配置するために使用されます。これは特に決まった規則があるわけではありません。ですのでチームやプロジェクトの規則に従ってください。

NodeはROSシステムにおける基本的な実行単位であり、各Nodeは独立したプロセスとして動作し、他のNodeと通信を行います。NodeはC++or Pythonで実装されることが一般的です。Nodeの役割は、センサーからデータを取得したり、制御コマンドを発行したりするなど、特定の機能を実行することです。

scriptsファイルの役割と格納するファイルの種類
=

一般的

元記事を表示

ABC365回答メモ

# 0.はじめに
 低調が続きますが、いつも苦戦するトヨタコンテストに参戦。
 予想通りA~Cしか解けず順調にレートが下がり
 706に・・・。600台まで見えてきました・・・。

# 1.A – Leap Year
 言語標準ライブラリで何とかなるようですが
 まぁ、条件すべて問題に書いてあるのでそれ通りの
 条件分岐で365か366を出力してACでした。

 https://atcoder.jp/contests/abc365/submissions/56247451

# 2.B – Second Best
 リストAを読み込み、A[i]とiをタプルにして
 リストLに追加していく。
 Lを降順ソートして先頭から2個目のi+1を表示して終了。

 https://atcoder.jp/contests/abc365/submissions/56253921

# 3.C – Transportation Expenses
 最初に思い付いた考え方の穴を埋めずに
 提出し続け3回くらいダメ出しを食らったため
 ペナルティが多くなってしまいました。
 【考え方】
  ・リストA

元記事を表示

NumpyのFFT入門(2) np.fft実習

# NumPyのFFT機能

NumPyは、Pythonで科学技術計算を行うための強力なライブラリであり、FFTを実行するための多くの関数を提供しています。これにより、信号処理やデータ解析を簡単に行うことができます。ここでは、`np.fft`モジュールの基本的な機能を紹介します。

## np.fftモジュールの概要

`np.fft`モジュールは、NumPyでFFTおよび逆FFTを行うための一連の関数を提供します。このモジュールを利用することで、複雑な信号を効率的に周波数領域に変換し、また時間領域に戻すことが可能です。主要な関数には、`fft`(FFTの計算)、`ifft`(逆FFT)、`fftfreq`(周波数成分の生成)、および`fftshift`(周波数成分のシフト)が含まれます。

![Spectral Methods and the FFT – YouTube](https://i.ytimg.com/vi/reievpVoSsY/hq720.jpg?sqp=-oaymwEXCK4FEIIDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLC9vYQXA

元記事を表示

RustでPythonのライブラリを使用する

PyO3は、RustとPythonを連携させるための強力なツールです。これにより、RustからPythonを呼び出したり、PythonからRustの関数を使用したりすることが可能になります。

## PyO3の主な特徴

1. **Pythonネイティブ拡張モジュールの作成**: Rustを使用してPythonの拡張モジュールを作成できます。これにより、Pythonの処理速度を大幅に向上させることができます。

2. **RustバイナリへのPythonの埋め込み**: RustプログラムからPythonコードを実行し、その結果を操作することができます。

3. **幅広いPythonバージョンのサポート**: PyO3は、Python 3.7以降のバージョン(CPython、PyPy、GraalPy)をサポートしています。

4. **Rustバージョンの要件**: Rust 1.63以降で動作します。

## 使用例

“`bash
cargo add pyo3 –features auto-initialize
“`

以下は、RustからPythonを呼び出す簡単な例で

元記事を表示

Python並行・並列処理を整理する (入門)

## 概要
大量データに関するワークロードを、モノリシックに解決する場合、並行・並列処理の知識は活用できます
但し、一般にPythonにはGILが存在するため、正しい挙動を抑えておきたい所です

## 内容
### Pythonにおける並行処理・並列処理
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2266010/1930f807-d02a-17ac-6c9b-388648d94f27.png)

1. プロセス = OSが管理する実行単位 (CPUコア毎)
2. スレッド = プロセス内の軽量な実行単位 (1CPUコア内)

上記前提を踏まえると、以下となります
1. 並行処理 = 1つのプロセスに複数のスレッドが存在します (PythonはGILにより基本1プロセス制約です)
2. 並列処理 = 複数のプロセスを並行して進めます (複数プロセス活用できます)

**MMU (Memory Management Unit)に関して**
プロセスから参照するメモリは`MMU`により制

元記事を表示

高校化学 

https://www.natural-science.or.jp/article/20160914170814.php

“`py
import math

# 体心立方格子 (BCC) の充填率、配位数、格子定数、原子半径
def bcc_properties():
a = 1 # 格子定数 (任意の単位)
r = math.sqrt(3) * a / 4 # 原子半径
volume_atom = 2 * (4 / 3) * math.pi * r**3 # 単位胞内の原子の体積
volume_unit_cell = a**3 # 単位胞の体積
packing_fraction = volume_atom / volume_unit_cell # 充填率
coordination_number = 8 # 配位数 (BCC)
return packing_fraction, coordination_number, a, r

# 面心立方格子 (FCC) の充填率、配位数、格子定数、原子半径
def fcc_p

元記事を表示

ラズパイ5に非推奨になったWiringPiのpythonライブラリをインストール

# ラズパイ5にWiringPi Pythonライブラリをインストール
まず最初に下記の記事でWiringPiのCライブラリをイントール(コンパイル)しておきます。

[ラズパイ5に非推奨になったWiringPIをインストール](https://qiita.com/kawamo55/items/35f3965692cea28aa03d)

次にgit clone https://github.com/WiringPi/WiringPi-Python
をCのソースディレクトリと同列に見える部分にクローンします。

cd WiringPi-Python
に移動します。

rm -rf WiringPi
でフォルダを消します。

ln -s ../WiringPi .
でシンボリックリンクを貼ります。

apt install swig
で必要なものをインストールして

python setup.py install
でインストールします。

# インポートできるかテスト!
pythonを起動して
import wiringpi
でエラーが出ないので大丈夫っぽい

# 追記
gitの更新履歴

元記事を表示

Python `operator.itemgetter`を使って複数のキーでソートする

## はじめに

Pythonでリストやタプルをソートする際、複数の条件に基づいてソートしたいことがあります。例えば、従業員のリストを年齢で昇順にソートし、同じ年齢の場合は給与で降順にソートするといったケースです。このような複雑なソートを簡単に実現する方法として、`operator.itemgetter`関数を使用する方法があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/56c1a37c-9556-51e2-acc5-49065514ca5a.png)

## `operator.itemgetter`とは

`operator.itemgetter`は、Pythonの標準ライブラリ`operator`モジュールに含まれる関数です。この関数は、与えられたインデックスやキーに基づいてオブジェクトから項目を取得する関数を返します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaw

元記事を表示

NumpyのFFT入門(1) (FT -> DFT -> FFTの解説)

# 1. はじめに

## この記事の目的

本記事では、NumPyを用いたFFT(高速フーリエ変換)の基本概念と応用方法について詳しく解説します。信号処理やデータ解析の分野で頻繁に用いられるFFTの理解は、大学生にとって重要です。この記事を通じて、FFTの理論から実装、そして実際の応用例までを学び、実践的なスキルを身につけることを目指します。

## FFTの重要性

FFTは、信号を時間領域から周波数領域に変換するための効率的なアルゴリズムであり、音声解析、画像処理、振動解析、通信システムなど、さまざまな分野で不可欠な技術です。FFTを用いることで、信号の周波数成分を迅速に抽出し、データの特性をより深く理解することが可能になります。

![img](https://miro.medium.com/v2/resize:fit:700/1*w1mcpi8gCgQI4FrqWFJ2GA.png)

[image source]: https://kinder-chen.medium.com/denoising-data-with-fast-fourier-transform-a81d9f

元記事を表示

初心者向けPythonのドキュメントやログ処理について気をつけたいこれだけのこと

## Pythonにはログの取り方がいろいろ用意されてます!

こんにちは、Pythonプログラマーの皆さん!今日は、Pythonでログ機能を実装する方法について、楽しく学んでいきましょう。ログは開発中のデバッグや、本番環境での問題解決に欠かせない重要なツールです。さあ、一緒にPythonのログの世界を探検しましょう!

## ログの基本

Pythonには標準ライブラリに`logging`モジュールが用意されています。これを使えば、簡単にログ機能を実装できます。

“`python
import logging

# ログの基本設定
logging.basicConfig(level=logging.INFO)

# ログの出力
logging.info(“こんにちは、ログの世界へようこそ!”)
“`

このコードを実行すると、次のような出力が得られます:

“`
INFO:root:こんにちは、ログの世界へようこそ!
“`

## ログレベルの活用

ログには異なるレベルがあります。主なものは以下の通りです:

– DEBUG
– INFO
– WARNING
– ERRO

元記事を表示

指定期間の日の出、日の入データをPythonのastralライブラリを使用して取得する

以下にコードを添付します。
実行前にastralライブラリをインストールしてください。

下記のページと比較することでデータに差異がないか確認できます。
###### 国立天文台 日の出入り
https://eco.mtk.nao.ac.jp/koyomi/dni/2017/s2401.html

“` python:日の入り時刻.py
from astral import LocationInfo
from astral.sun import sun
from datetime import datetime, timedelta, timezone

def get_sunrise_sunset(lat, lon, start_date, end_date):
location = LocationInfo(latitude=lat, longitude=lon)
current_date = start_date
sun_times = []

while current_date <= end_date: s = sun

元記事を表示

双極幾何学ってなんですか?

# はじめに

# 双極幾何学とは?

双極幾何学は数学の一分野で、特に幾何学と代数学の交わる領域に位置します。この理論は、通常の幾何学的な図形や空間を、2つの極(ポイント)を基準にして表現し解析する方法を提供します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348593/7eae1fb6-43fc-1476-fa24-a92f26f1c870.png)

### 主な特徴:

– 2つの固定点(極)を基準にして、空間や図形を表現する
– 従来のユークリッド座標系ではなく、独自の座標系を使用する
– 複素数平面との関連が深く、複素関数論にも応用される
– 円や球面の性質を研究する上で特に有用

## ユークリッド幾何学との違い

ユークリッド幾何学は平面上の幾何学で、曲率がゼロの幾何学とも言えます。無限に広がる平面空間を扱います。
一方で、「双曲幾何学」では、曲率が負の空間を扱います。

## 双曲線(Hyperbola)とは
双曲線は、平面上の2つの固定点

元記事を表示

PyTorch : MLPを用いた単純な回帰問題

# 記事の内容
MLPを用いた単純な回帰モデル
モデル:MLP ( PyTorch )

# スクリプト
“`d01_Pytorch_MLP_Simple_Regression.ipynb
import torch
import torch.nn as nn
import torch.optim as optim
import matplotlib.pyplot as plt
torch.manual_seed(0)

# データの生成
data_size = 5000
x = torch.randn(data_size, 1) # 正規分布に従う乱数
y = 2 * x + 3 + torch.randn(data_size, 1) * 0 # 動作確認のためノイズは0にしているがノイズを追加をしても問題なく動作した。

# データを学習用と検証用に分割
train_size = int(0.8 * len(x))
x_train, x_vali = torch.split(x, [train_size, len(x) – train_size])
y_train_act, y

元記事を表示

速いぞ。0.00015秒。250,000倍速い高速化エンジニアリング。超速の ハッシュ計算とはなんですか。CPU Time: 38.7979  GPU Time: 0.00015

![f3148959-365d-46b0-a3c2-8713b855cab4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846020/9e722d4e-e5ae-c171-923f-04b25292a230.png)

#### 物語:GPUハッシュ計算プログラムの冒険
ある小学校6年生の男の子、ケンタはコンピュータに夢中な子どもでした。ある日、ケンタは「ハッシュ関数」というものについて学びました。それはコンピュータがビットコインマイニングを高速で行うために使う特別な方法だと聞きました。

ケンタが学んだハッシュ関数のアルゴリズムは、データを受け取って、一定のルールに従って別の形に変えるというものです。たとえば、「Hello World」というメッセージがあったとします。ハッシュ関数はこのメッセージを一定のパターンで変換して、長い数字の列にします。この数字の列はそのメッセージにだけ特有で、同じメッセージならいつも同じ列ができるのです。

ケンタは、ハッシュ関数がどれほど速く計算でき

元記事を表示

元美容師が職業訓練校で作成したDjango/HTMLポートフォリオをDjango/Reactで作り直してみる。Part.1

# 元美容師エンジニアが挑む、美容室予約システムのフルリニューアル計画

## はじめに

こんにちは。22歳から30歳まで美容師として働き、30歳を機にSES企業へ転職しました。現在は転職して1年になりますが、現場ではテスターとしての毎日を過ごしており、なかなか開発案件には入ることができず苦労しております。ただ現場とは別で最近自社のReact開発に携わる機会をいただきました。そんな中で転職前に通っていた職業訓練校で作成したDjangoアプリを思い出し、もう一度Reactを使って作り直そうと思いました。

## プロジェクトの背景

### このままでいいのか…
SES企業に転職し、テスターとしての毎日を過ごすなかで、開発に手を付ける機会も減ってしまいました。また自身に胸を張って提出できるポートフォリオがないことも引け目に感じていました。そんなタイミングで今回運良く自社でのReact開発に携わらせていただき、これをきっかけに新しくポートフォリオを作り直そうと決心しました!

### 既存のDjangoアプリ

SES企業への転職前、職業訓練校でDjangoを学び、そこで作成した美

元記事を表示

Pythonでシステム同定用入力信号の生成

### 記事の内容
Pythonでシステム同定用入力信号の生成を行うサンプルスクリプト
作成する信号:ステップ入力、Chirp、白色ノイズ

### サンプルスクリプト
“`ruby:qiita.rb
import numpy as np
import matplotlib.pyplot as plt

# 入力信号の生成(入力信号:ステップ入力)
duration = 1 # 信号の継続時間 (秒)
sampling_rate = 1000 # サンプリングレート (Hz)
t = np.linspace(0, duration, int(sampling_rate * duration), endpoint=False)
step_time = 0.1 #ステップ時刻
step_signal = np.zeros_like(t)
step_signal[int(step_time * sampling_rate):] = 1
#グラフ表示
plt.figure(figsize=(20, 8))
plt.plot(t, step_signal, label=”step_sig

元記事を表示

Pythonで伝達関数モデルの同定

### 記事の内容
Pythonでシステム同定を行うサンプルスクリプト。
モデルは伝達関数。
同定用入力信号にステップ入力およびChirp信号を用いてみたが、単純な伝達関数ではどちらの信号を用いても問題なくシステム同定できた。

### スクリプトの例1
モデル:伝達関数
同定用入力信号:ステップ入力
検証用入力信号:ステップ入力
“`a03_SystemIdentification.ipynb
from control.matlab import*
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from scipy.optimize import minimize

# ——-入力信号の生成————
duration = 100 # 信号の継続時間 (秒)
sampling_rate = 100 # サンプリングレート (Hz)

# 時間軸の作成
t = np.linspace(0, duration, int(sampling_rate * duration)

元記事を表示

WindowsでのPythonスクリプト実行時のUTF-8問題と解決策

## 問題の根本

WindowsでのPythonスクリプト実行時、システムのデフォルトエンコーディング(多くの場合Shift-JIS)とUTF-8で書かれたスクリプトとの間で不一致が発生し、文字化けや実行エラーを引き起こします。

## 解決策:UTF-8 Mode (PEP 540)

Python 3.7で導入されたUTF-8 Modeは、この問題に対する主要な解決策です。

### 主な特徴

1. Pythonのデフォルトエンコーディングをシステム設定に関わらずUTF-8に設定
2. ファイルシステムエンコーディングは変更されない
3. 新しく開かれるファイルのデフォルトエンコーディングがUTF-8になる

### 有効化方法

– 環境変数 `PYTHONUTF8=1` を設定
– コマンドライン引数 `-X utf8` を使用

## 影響

1. Pythonスクリプトファイル(.py): すべてUTF-8として読み込まれる
2. コンパイル済みライブラリ(.pyc, .pyd, .so): UTF-8 Modeの影響を受けない
3. 外部ファイルの読み書き: 明示的な

元記事を表示

ABC365参加記録 by Python

# リアルタイムに解けた問題

## [A – Leap Year](https://atcoder.jp/contests/abc365/tasks/abc365_a)

### 問題文
1583以上2023以下の整数$Y$が与えられます。
西暦$Y$年の日数を求めてください。
なお、制約の範囲内では西暦$Y$年の日数は以下の通りです。
– $Y$が4の倍数でない年は365日
– $Y$が4の倍数で、かつ100の倍数でない年は366日
– $Y$が100の倍数で、かつ400の倍数でない年は365日
– $Y$が400の倍数である年は366日

### 制約
– $Y$は1583以上2023以下の整数

### アルゴリズム
制約の通りにif文を作成。

### ソースコード
“` python
Y = int(input())

if Y % 400 == 0:
print(366)
elif Y % 100 == 0 and Y % 400 != 0:
print(365)
elif Y % 4 == 0 and Y % 100 != 0:
print(366)

元記事を表示

OTHERカテゴリの最新記事