Python関連のことを調べてみた2020年11月23日

Python関連のことを調べてみた2020年11月23日

重み付き乱択アルゴリズムをまとめて計測してみた

強化学習の優先順位付き経験再生を実装しているときに、キューから優先順位に従ってランダムに要素を取り出す必要がありました。
その場合に重み付きの(偏りがある)乱数を発生させる高速な手法を調べていましたが、情報があまりない感じだったのでまとめて比較してみました。

# 重み付き乱択アルゴリズム

重み付きランダムサンプリングといったり重み付きランダム抽出といったり復元抽出といったり言い方は定まっていない気がします。
比較したアルゴリズムは以下です。

+ シンプルな累積和
+ シンプルな累積和(バイナリサーチ版)
+ Numpy の choice関数(python限定)
+ Numpy の multinomial関数(python限定)
+ Walker’s Alias法
+ 二分木探索(SumTree)
+ 逆関数法(※1)

※1:これだけ重みのつけ方に制限があります。

参考:
・[重み付きランダムサンプリングアルゴリズム](https://qiita.com/kaityo256/items/64c12bb8c8946d7f03c6)

# 各アルゴリズムの比較
## 計算量

元記事を表示

Pythonのlru_cacheが遅かった(と勘違いしたので調査した)件

## TL;DR
遅くないです。
`lru_cache` の `maxsize` は設定しないとデフォルトで `128` に設定されるので気をつけましょう.
[参考](https://docs.python.org/3/library/functools.html)

# 動的計画法で `functools.lru_cache` 使ったら `TLE` だった

## 実装
[AtCoder Beginner Contest184のD](https://atcoder.jp/contests/abc184/tasks/abc184_d)にて、DPの問題が出題されました。

“`python
from functools import lru_cache

def solve(n1: int, n2: int, n3: int) -> float:
@lru_cache
def expect(a: int, b: int, c: int) -> float:
if 100 in (a, b, c):
return 0

元記事を表示

MetaImageIO ( *.mha, *.mhd ) を tiff stackに変換

# pythonでSimpleITKをつかう

コア部分は下記の通り。
出力にtiffを指定すれば、自動的にスタックファイルになる。

“`python
import SimpleITK as sitk

reader = sitk.ImageFileReader()
reader.SetImageIO(“MetaImageIO”)
reader.SetFileName(inputImageFileName)
image = reader.Execute();

writer = sitk.ImageFileWriter()
writer.SetImageIO(“TIFFImageIO”)
writer.SetFileName(outputImageFileName)
writer.Execute(image)
“`

`SetImageIO`を変えれば、他のファイルの読み書きができる。

ターミナルで使いやすいように、私は下記のようにしている。

“`python:mhd2tif
#!/usr/bin/env python3
import os,sys
import Simpl

元記事を表示

AtCoder水色になるには

##0.はじめに
こんにちは、[HIROSHI0635](https://atcoder.jp/users/HIROSHI0635)です。緑色になった時も、簡単な記事を書きましたが、緑になってから約9ヶ月でなんとか水色になることができました。正直かかった時間としては長い方だと思います。だからこそ緑や茶色で苦戦してる方に少しでもヒントとなるものが書ければと思って執筆しております。そういう意図もあって、あえておこがましくも「AtCoder水色になるまで」ではなく、「AtCoder水色なるには」というタイトルを付けました(記事書いてる途中で緑落ちしてるのはご愛敬…)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/443550/f1729cd4-ab4c-5a1b-1472-d33de49926d1.png)

| 章 | タイトル | 備考 |
|:———–|:————|:————|
| 1.

元記事を表示

【Python3.8~】配列などを定義と同時に書き換える【tips】

#はじめに

>**~配列の初期化をコンパクトにしたい~**

その願い、実現できます。そう、3.8~ならね。

#どうやるか

“`python
(変数名 := 定義)[スライス] = 変更
“`
注) スライスしない場合も`[:]`などとつけないとエラーを吐きます。

例えば
>**~対角線上に1~9が並んでる正方行列に、3行おきに1を足した行列を定義したい~**

そんな謎のシチュエーションもこの通り

“`python
import numpy as np
(x:=np.diag(range(10)))[::3] += 1
x
“`

“`:out
array([[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 2, 0, 0, 0, 0, 0, 0, 0],
[ 1, 1, 1, 4, 1, 1, 1, 1, 1, 1],
[ 0, 0,

元記事を表示

【Python】Google画像検索からオリジナル画像を根こそぎダウンロード

#はじめに
以前、Google画像検索からサムネ画像をダウンロードする方法を書きましたが、
この度、画像を詳細表示(検索結果を1度クリックした状態)すれば、元画像のリンクがページソース上に記載される、ということが判明しました。
この仕様を生かしてオリジナル画像をダウンロードしていきましょう(Googleがつよいからって負担はかけすぎないように注意しましょう。)

#プログラムの流れ
**SeleniumでGoogle画像検索
  ↓
1つ目の画像を詳細表示後、右カーソルキーを押下しまくる
  ↓
オリジナル画像のリンクを取得
  ↓
ダウンロード**

#実装
`Selenium, requests`あたりはインストールしてなかったらしてください。
`ChromeDriver`は実行パスにある設定になってるんで、適宜書き換えてください(インポート文のすぐ下)。
リファクタリングとかはしてないので汚いですが勘弁。

“`python
from selenium import webdriver
from selenium.webdriver.chrome.options import

元記事を表示

pyknp(JUMAN,KNP)をwindowsで使えるようにする

# 目次
1.開発環境
2.各種ソフトをダウンロード
3.コマンドプロンプトで確認
4.pyknpインストール
5.使用テスト
6.プログラム書き換え
7.参考・余談

少しでも参考になると嬉しいです、セットアップ頑張ってください!
# 1.開発環境
**環境**
*Windows10
*Python-3.7.5 64bit
**ターミナル?**
*Command prompt
*Visual studio codeのターミナル

# 2.各種ソフトをダウンロード
まずJUMANとKNPをダウンロードします
### [**1.JUMAN**](http://nlp.ist.i.kyoto-u.ac.jp/index.php?JUMAN)
>ダウンロードの欄の上から3番目くらいに、
**JUMAN Ver.7.0 (Windows 64bit版) (インストーラ付; 8,330,604 bytes)**
ってのがあります。それをダウンロードして、開いたらインストールの作業に移ります
![image.png](https://qiita-image-store.s3.ap-northeas

元記事を表示

【Python】対象物の画素値RGBの平均値を計算する

#1. 概要

今回紹介するのは、対象物の画素値RGBの平均値をcsvファイルに出力する処理です。
![apple_introduction.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565845/7189c79c-1d50-19bb-8dfc-edda9a38e6bc.jpeg)

りんごなど、対象物の画像の画素値の平均を求めたい!
という時に使用できます。この処理を構築した経緯としては、以前私がQiitaに投稿した記事にあります。↓
[【Python】サポートベクタマシン(SVM)を使って画素値からりんごと梨を分類][0]
[0]:https://qiita.com/ZESSU/items/3083ce23e0405565765d
この記事で取り上げた手法の前処理、「りんごと梨の画像それぞれのRGB画素値の平均値の取得」を行うために本処理を使用しています。

本処理をするにあたって必要な情報は対象物が映っている画像だけあればOKです。ただし、背景が入っていると正しく計算できないので、ペイントなど

元記事を表示

【Docker入門】〜jupyter lab起動までの最短解説〜

#はじめに
この記事では、docker初心者がjupyter labの起動まで最速で到達することを目的としております。
containerやimageなど、dockerの専門用語の深い話は飛ばされているので、気になる部分は適宜ググってみてください。

記事を読んで参考になったと思った方は、LGTM押していただけると幸いです!

#前提
・mac環境で実施しております

#目次
1. 環境構築の作業全体像
2. dockerインストール
3. Dockerfile作成
4. image作成
5. container作成
6. 環境の削除

#1. 環境構築の作業全体像
Dockerでの環境構築の基本的な流れは、以下の通り
1. Dockerfileの作成
2. imageの作成
3. containerの作成&起動

それぞれ一言で解説すると

|用語|一言解説|参考URL|
|:—|:—|:—|
|Dockerfile|構築する環境の設計書
(このファイルを見ればどんな環境なのか一目でわかります)|-|
|image|環境情報を持つ複製可能な環境ファイル
(1つ

元記事を表示

[Python ]お買い物プログラム

#Pythonでお買い物プログラムを作る
“`java:
items = {‘apple’: 100, ‘banana’: 200, ‘orange’: 400}
money = 1000
for item_name in items:
print(‘————————————————–‘)
print(‘財布には’ + str(money) + ‘円入っています’)

print(item_name + ‘は1個’ + str(items[item_name]) + ‘円です’)

input_count = input(‘購入する’ + item_name + ‘の個数を入力してください:’)
print(‘購入する’ + item_name + ‘の個数は’ + input_count + ‘個です’)
count = int(input_count)
total_price = items[item_name] * count
pri

元記事を表示

LeetCodeに毎日挑戦してみた 20. Valid Parentheses(Python、Go)

## はじめに

無料英単語サイト[E-tan](https://your-e-tan.com/)を運営中の@ishishowです。

プログラマとしての能力を上げるために毎日leetcodeに取り組み、自分なりの解き方を挙げていきたいと思います。

#### Leetcodeとは

[leetcode.com](https://leetcode.com/)
ソフトウェア開発職のコーディング面接の練習といえばこれらしいです。
合計1500問以上のコーデイング問題が投稿されていて、実際の面接でも同じ問題が出されることは多いらしいとのことです。

Go言語入門+アルゴリズム脳の強化のためにGolangとPythonで解いていこうと思います。(Pythonは弱弱だが経験あり)

#### 6問目(問題20)

#### 20. Valid Parentheses

– 問題内容(日本語訳)

> 文字列を考える`s`だけで文字を含む`'(‘`、`’)’`、`'{‘`、`’}’`、`'[‘`と`’]’`、入力文字列が有効であるかどうかを決定。
>
> 入力文字列は、次の場合に有

元記事を表示

AtCoder Beginner Contest 184 参戦記

# AtCoder Beginner Contest 184 参戦記

ABC でC問題解けなかったの初めて…….

## [ABC184A – Determinant](https://atcoder.jp/contests/abc184/tasks/abc184_a)

1分で突破. 書くだけ.

“`python
a, b = map(int, input().split())
c, d = map(int, input().split())

print(a * d – b * c)
“`

## [ABC184B – Quizzes](https://atcoder.jp/contests/abc184/tasks/abc184_b)

3分で突破. 書くだけ.

“`python
N, X = map(int, input().split())
S = input()

result = X
for c in S:
if c == ‘o’:
result += 1
elif c == ‘x’:
if result !=

元記事を表示

愛知県の新型コロナ発生事例のPDFをCSVに変換

“`python
import datetime
import pathlib
import re
from urllib.parse import urljoin

import pandas as pd
import pdfplumber
import requests
from bs4 import BeautifulSoup

def fetch_file(url, dir=”.”):

r = requests.get(url)
r.raise_for_status()

p = pathlib.Path(dir, pathlib.PurePath(url).name)
p.parent.mkdir(parents=True, exist_ok=True)

with p.open(mode=”wb”) as fw:
fw.write(r.content)
return p

def days2date(s):

y = dt_now.year

days = re.findall(“[0-

元記事を表示

画像処理100本ノック!!(021 – 030)一息入れたい・・・

# 1. はじめに
 画像の前処理の技術力向上のためにこちらを実践 [画像処理100本ノック!!](https://github.com/yoyoyo-yo/Gasyori100knock)
とっかかりやすいようにColaboratoryでやります。
目標は2週間で完了できるようにやっていきます。丁寧に解説します。質問バシバシください!
001 – 010 は右のリンク  [画像処理100本ノック!!(001 – 010)丁寧にじっくりと](https://qiita.com/ProgramWataru/items/754d49c40ff73caec669)
011 – 020 は右のリンク  [画像処理100本ノック!!(011 – 020)序盤戦](https://qiita.com/ProgramWataru/items/4f568202c2bd79298c00)

# 2. 前準備
ライブラリ等々を以下のように導入。

“`python:
# ライブラリをインポート
from google.colab import drive
import numpy as np
impo

元記事を表示

pythonコメントアウト

・行単位のコメントは、#に続けて記述

“`php
# Hello, world!を表示
print “Hello, world!”
“`

・複数行にまたがるコメントアウト
”'(シングルクォーテーション3つ)あるいは”””(ダブルクォーテーション3つ)で囲まれた部分が
コメントアウトされる

“`php
”’
この行はコメントです。
この行もコメントです。
”’
“`

元記事を表示

【Python】Beautiful SoupでWeb上の画像を一括で保存する方法

## はじめに
ここではWebスクレイピングで『Web上の画像を一括で保存する方法』について紹介します。

:warning: 注意 :warning:
著作権で保護されている場合や著作権的にはOKだが利用規約でスクレイピングを禁止している場合、損害賠償請求などの可能性があるのでしっかり著作権法や利用規約を理解した上でWebスクレイピングを行いましょう。

## 目次
1. [Webスクレイピングを行う方法](#1-Webスクレイピングを行う方法)
1. [実際に画像を保存してみる](#2-実際に画像を保存してみる)
1. [抽出の流れ](#3-抽出の流れ)
1. [まとめ](#4-まとめ)
1. [おまけ](#5-おまけ)
1. [参考](#6-参考)

## 1. Webスクレイピングを行う方法
Webスクレイピングを行うためには「Ruby」や「PHP」、「Javascript」など様々な言語で可能ですが、今回はPythonの『Beautiful Soup』を用いた方法を紹介します。

## 2. 実際に画像を保存してみる
① pipでbeautifulsoup4をインストール

元記事を表示

小プロセスを含めたkill

#概要
小プロセスを含め、killをするためのツールです。python用です。
(pythonのプロセスで縛りを掛けています。)
検証はlinuxのみしてあります。

使い方は、
そのまま実行すると、小プロセスを持つ親プロセスの一覧が表示されるので、
(例としてproc_01.py proc_02.pyの小プロセスを持つプログラムが実行中とします。)

“`
$ python terminate_children_process.py

python 関連の小プロセスを持つprocess一覧
コマンドラインにPIDを指定すると、小プロセスを含めてterminate します。
{‘pid’: 26727, ‘cmdline’: [‘python’, ‘proc_01.py’]}
{‘pid’: 26747, ‘cmdline’: [‘python’, ‘proc_02.py’]}
“`

終了させたいpidを指定し再び実行します。

“`
$ python terminate_children_process.py 26747

terminate 子プロセス 26849

元記事を表示

Python + Selenium + Chromeでよく使うオプションをメモ

# はじめに
Python + Selenium + Chromeでよく使うオプションをメモ

## 環境情報
* python: 3.9.0
* chrome: 86.0.4240.198
* selenium: 3.141.0

# Python + Selenium + Chromeでよく使うオプション

“`py
from selenium import webdriver

options = webdriver.chrome.options.Options()
# 画面を非表示
options.add_argument(‘–headless’)
# 必須らしい
options.add_argument(‘–disable-gpu’)
# サイズ指定
options.add_argument(‘–window-size=1920,1080’)
# コンテナの権限不足回避
options.add_argument(‘–no-sandbox’)
# 画像を読み込まない
options.add_argument(‘–blink-settings=imagesEnable

元記事を表示

Pythonでのアスタリスク(*)の使われ方

#概要
Pythonでのアスタリスク(*)の使われ方が、よくわからなかったので調べた。
リファレンスでの説明を確認した。

この記事のポイントは、リファレンスで、どこで説明されているかを示したこと。あと、関数の引数でのアスタリスクは有名だが、引数だけで、極端な使い方の特殊がされているわけでない、ことを示したい( したい)と感じたため。

引用は、すべて、
https://docs.python.org/ja/3.7/reference/

#結果
##使い方1(乗算演算)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342207/860d83ea-ade5-9015-af36-2e7637853713.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342207/bc77ba97-51a0-8f9d-c9ce-9c2c7dbbd534.png)

![image.png](h

元記事を表示

Python + Selenium + ChromeでChromeバージョンに合ったChromeDriverを自動インストールする方法

# はじめに
selenium + python + chrome でChromeDriverのバージョンエラーに悩まされたので、対処方法をメモ

## 環境情報
* python: 3.9.0
* chrome: 86.0.4240.198
* selenium: 3.141.0

# Chromeバージョンに合ったChromeDriverを自動インストールする方法
下記のように設定すると、Chromeバージョンに合ったChromeDriverが自動インストールされます!

“`py
import requests
from selenium import webdriver
from webdriver_manager.utils import chrome_version
from webdriver_manager.chrome import ChromeDriverManager

version = chrome_version()
url = ‘http://chromedriver.storage.googleapis.com/LATEST_RELEASE_’ + v

元記事を表示

OTHERカテゴリの最新記事