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

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

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を提供していて、これを読み出すと、環境ノイズからの
真の乱数を得ることができます。なので、これを乱数の種に使いましょう。

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

ですが、なお、/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,

元記事を表示

Windows10でYOLOXを動かすときのエラーと対策

Windows10でYOLOXを動かしてみたら色々とエラーがでて苦戦したので、エラーと対策をまとめてみました。

## subprocess.CalledProcessError: Command ‘[‘where’, ‘cl’]’ returned non-zero exit status 1.

### 内容

Visual Studioの環境変数が通っておらず、clコマンドが実行できないというエラー。

### 対策

VisualStudioの環境変数を設定します。パスの内容は自身の環境に合わせて適宜変更してください。

1.PATHに以下の2つのパスを追加
“`
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE
“`

2.LIBという環境変数を作成し以下の3つパスを追加

元記事を表示

[python]Seleniumでの待機処理

# はじめに
pythonでSeleniumを遊び半分で触っていて発生したエラー第一弾です。
#### 前回までのあらすじ
PythonでChromeDriverを操作してyoutubeの特定の画面へ遷移し、条件に合ったyoutube動画の情報をスクレイピングするコードを紹介しました。

https://qiita.com/Oyama-Kohei/items/3b4153ea5f699f28042c
#### 今回発生したエラー
下記のコード実行中に発生
“`python
# ChromeDriverでurlを起動
driver = webdriver.Chrome(CHROME_DRIVER_PATH)
driver.get(url)

xpath = ‘//*[@id=”tabsContent”]/tp-yt-paper-tab[2]’
driver.find_element_by_xpath(xpath).click()
“`
エラー内容としては以下
“`
selenium.common.exceptions.NoSuchElementException: Message:

元記事を表示

コロナが来なかった場合の国内映画興行収入予測

# 0. 目次
1. はじめに
1. データ内容
1. 分析の狙いと推測
1. 実行環境
1. データ分析の流れ
1. データ分析の結果
1. 終わりに
1. 自己紹介

# 1. はじめに
昨今、様々な動画配信サービスの登場により、契約してしまえば映画館にもレンタルビデオ店にも行かず、自宅でドラマや映画が見放題という数年前までは考えられないような世界になった。
私自身も「NetFilx」「Disney+」「Prime Video」など複数のサービスを利用し、楽しんでいる。
これらにサービスを利用してる人なら1度は私と同じ経験をしたことがあるかもしれない。
###### **最近まで上映してたはずなのに、もう配信が始まってる!!**
###### **すぐ配信するなら映画館に行かずに配信待てばよかった...**
大迫力のスクリーン・高品質のサウンド・様々な映画予告を見ながら上映を待つワクワク感は、やはり映画館に足を運ばなければ体験出来ないが、自宅で気軽に映画が見られる時代となってからは映画館に行く機会は減り、最後に映画館に行ったのはいつか思い出せないほどになってしまった。

前置きが長

元記事を表示

AtCoder Beginner Contest(ABC) 282 – Pythonでのリアルタイム参加結果と内容整理

# 1. 前書き
AtCoderBeginnerContest(ABC)の参加結果と内容の整理、および外部の解説記事を参考にした上で、自分なりに解法を整理していきます。
使用言語はPythonで行きます。本業ではJavaかRubyonRailsユーザーですが、計算速度の問題であったり、トレンドに乗っておくという意味でも(こちらが大きい)、Pythonに慣れていきたいと思います。

# 2. コンテスト内容
– コンテスト名
– AtCoder Beginner Contest 282
– 開催日時
– 2022/12/17(土) 21:00 – 22:40
– 実施区分
– リアルタイム参加

# 3. 結果
|区分|結果|所要時間|実行時間|
|:–|:–|:–|:–|
|A問題|AC|6:00|19ms|
|B問題|AC|26:14|24ms|
|C問題|AC(1)|68:15|197ms|
|D問題|未提出|-|-|

# 4. 解説

## 4-1. A – Generalized ABC

### 4-1-1. 問題文
整数 K が与えられます

元記事を表示

windows環境でbcil_dcm_convert.pyを使ってみた

# 目的
bcil_dcm_convert.pyを使って情報を取り出したCSVが見たいので、githubのソースを使いたい。
どうやって使うのかしらこれ?
https://github.com/RIKEN-BCIL/BCILDCMCONVERT

# 前提
・Windows10
・Python3.8は入っている前提
・dcm2niixはインストールしていない。(けど情報の入ったCSVだけ取得ができるとの噂)

# 手順
## まずはソースをダウンロード
緑色の「Code」を押すと「Download ZIP」と書いてある所が出てくるのでそこをポチっとする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3111190/5b6c190b-a16f-f874-caa4-f400992a1122.png)

## 解凍する

Pythonのパスが通る場所ならどこでも良いから解凍する。Cドラのがめんどくないよね多分・・・
私の場合はとりあえずC:\Users\XXXXXX\Documents

元記事を表示

AtCoder 競プロ典型 90問 001 – Yokan Party(★4) Python解答例(二分探索 / 貪欲法)

[Supership](https://supership.jp/)の名畑です。先日、知り合いの一世代上の女性が「[スラムダンクの映画](https://slamdunk-movie.jp/)が流行ってるんですよね。原作読んだことないけど行ってみようかな」という話をしていて、本当に人気なんだなと実感しました。

## はじめに

競プロ典型 90問の過去問解答例シリーズです。
今回は1問目のYokan Partyです。難易度は★4なので緑diffの難易度でしょうか。

:::note info
**競プロ典型 90問**についての説明や解答例の目次は[こちらの記事](https://qiita.com/nabata/items/2872fc1485f24ee2865a)をご覧ください
:::

## 001 – Yokan Party(★4)

### 公式リンク

– [問題](https://atcoder.jp/contests/typical90/tasks/typical90_a)
– [解説](https://github.com/E869120/kyopro_educat

元記事を表示

OTHERカテゴリの最新記事