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

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

【AtCoder】ABC251E Takahashi and Animals Python解説

# はじめに

ABC 251 E 問題 Takahashi and Animals を解くために考えたこと、ACできるPython3(PyPy3)コードを紹介します。

# E.Takahashi and Animals

[問題ページ](https://atcoder.jp/contests/abc251/tasks/abc251_e)
難易度 : 水色 1227

# 考察

$Ai$ すべてについて 払う,払わないを考えられれば簡単ですが、計算量が $2^N$ となるので間に合いません。

ここで、餌やりがどういうルールであるか理解するために可視化してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3012066/dd18cd7a-6830-717f-21e6-b6085db456d1.png)
つまり **$\ i ≦ k ≦ N\ $ 番目までの動物への餌やりが完了している状態** からは、$i-

元記事を表示

Kaggleに挑戦 Tabular Ordinal Regression with a Wine Quality Dataset?

# はじめに
DNNの回帰タスクをやっています.

特徴全部そのまま放り込んだら下から数えて10番くらいでした(´;ω;`)ウゥゥ
Kaggleは前処理コンペみたいな感じありますね~

というかDeepはモデルより前処理がすっごく大事であるという話ですわ.
前処理を制すものは,Deepを制すってね.さぁ,やっていきましょう.

Kaggele上で公開しているコードは[こちら](https://www.kaggle.com/code/shiraeharuto/dnn-regression/notebook)から.

# Import
必要なライブラリのインポートと,Deviceの指定です.
~~~
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
from torch.utils.data import TensorDatas

元記事を表示

WEBスクレイピングGUIデスクトップアプリケーション feat.ひよっこフロントエンド

## はしがき
できれば1月中に書きたかったけど寒くてできんかった。
毎日やってる某単純作業が面倒で自動化したいなって思ったのがことの発端。
スクレイピング(今回はブラウザ自動操作)の自動化はすでにできていたけど、CLIでコマンド流すだけなの機械的だなあてことでGUIの作成を考え始める。
今回全て初めて扱った技術なのでこんなの作ったよってのと所感とかを述べたいと思います。

## 実行環境 & 使用技術
– macOS 12.2.1
– Python 3.11.1
– selenium 4.7.2
– tkinter 8.6

## 構成
`構成図`
![attend.py.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3078763/9e3b8c2a-d5c4-65cf-14fb-d92834b7a562.png)

`ディレクトリ構成`
“`
.
├── scraping.py // スクレイピング操作の関数
├── gui.py                  // GUIアプリのUI/

元記事を表示

matplotlibでグラフを作ってOpenCVで好きな画像とアルファブレンドする

# 環境
python 3.9.6
Windows11
# 使用する画像
![221219_26.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2134624/55855ad5-d7b4-59de-6275-b3271b5bcb79.jpeg)
# 下準備
下準備にコードを置く場所と同じ階層にアルファブレンドしたい画像を置こう!
# コード
“`python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import cv2

def sin():
fig, ax = plt.subplots()
x = np.linspace(0, 18, 100)
for i in range(1, 10):
ax.plot(x, np.sin(x + i * .5) * (7 – i))
fig.savefig(‘fig.jpg’) # グラフのセーブ

ax = si

元記事を表示

ファイル名が重複しないように自前のタイムスタンプをファイル名に入れるための備忘録メモ

プログラムを実行した結果をプログラムに保存させる時に、ファイル名の重複チェックを入れずにそのまま上書き保存してしまっては目も当てられません。。。:scream: :scream_cat: そこでファイル名が重複しないように自前のタイムスタンプを入れる様にしたのですが、毎度書き方を忘れるため、備忘録メモ。

“`python
from datetime import datetime

today = datetime.now()
tstamp = f'{today.year}{today.month:02}{today.day:02}{today.hour:02}{today.minute:02}{today.second:02}’
file_name = f’hogehoge_{tstamp}’
“`

これで`hogehoge_202302061815`という形式で保存できます。これでも重複が発生する場合は、microsecondまで含めると良いでしょう。(筆者の用途ではsecondまでで十分)

元記事を表示

Kaggleに挑戦 DigitRecognizer?

# はじめに
KaggleのDigitRecognizerタスクの解説です.
全コードを載せているので,参考にしてください.
[KaggeleのNotebook](https://www.kaggle.com/code/shiraeharuto/digitrecognizer-cnn-classification)

# IMPORT
必要なライブラリのImportです.
~~~
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
from torch.utils.data import TensorDataset
from torch.utils.data import Dataset
from torch.utils.data import DataLoader
# Validation
from torchvision

元記事を表示

【leetcode × Python】任意の英数字から隣り合う2つの文字が同じ型でないことを確認する

# はじめに

以前にも、leetcodeは使用したことがあったのですが、今回、2年ぶりぐらいに解いてみました。
その時は`Easyモード`ですら難しく何時間もかけて解いていました。
当時は、Hintと回答を見ながらやっと解ける感じでした。

そこで今回、久しぶりに`Easyモード`を解いてみることにしました。

# 目次

[1.実際に解いた問題](#1-実際に解いた問題)
[2.私が出した回答がこちら](#2-私が出した回答がこちら)
[3.リファクタリングしていく](#3-リファクタリングしていく)
[4.リファクタリング後のコード](#4-リファクタリング後のコード)
[5.最後に](#5-最後に)

# 1. 実際に解いた問題

leetcodeではランダムに問題が選択できるのですが、そこから`Easy`を選びました
今回解いた問題がこちらです。

https://leetcode.com/problems/reformat-the-string/description/

以下が問題を日本語訳したものです

“`
英数字の文字列sが与えられる(英数字の文字列とは、小文字の

元記事を表示

RollingHashクラスをPythonでつくった

## 例題

https://atcoder.jp/contests/abc284/tasks/abc284_f

https://yukicoder.me/problems/no/2204

## つくったコード

“`Python
“””ローリングハッシュ

文字列にハッシュをかけて1次元の数に置き換えます。
長い文字列でも、一致判定をO(1)くらいでできます。

・使い方
rh=RollingHash(S): インスタンス作成。 計算量: O(len(S))
rh.value(l,r): 半開区間[l,r)のハッシュ値を返します。 計算量: O(1)
rh.merged_string_value(section_list):
半開区間をたくさん入れたリストsection_listについて、
各区間の文字列を連結させてできる文字列のハッシュ値を返します。
計算量: O(len(section_list)) (そんなにやばくない)
rh.same(section_list1,section_list2):
2つの文字列が同じならTrueを、そう

元記事を表示

Python学習、残り日数計算

こんにちはkmdです。
今回はyoutube等で学習用として紹介されていた日数計算について挑戦してみました。

問題)
今年があと何日あるかを
本日の日付から算出して
「今年はあと何日」と
出力するプログラムを作る

“`
import datetime

nenmatsu = datetime.date(2023, 12, 31)
today = datetime.date.today()
hikaku = nenmatsu – today

print(‘今日は’, today)
print(‘今年は残り’, hikaku.days, ‘日です’)
“`

前回のじゃんけんに比べ非常に難易度を落としたのですが、やはりじゃんけんのプログラムは一番最初に行うには難易度が高かったと感じました。

実行結果は
“`
今日は 2023-02-05
今年は残り 329 日です
“`
まだできないのですが、todayのデータをリストか何かに格納してもっと美しく出力できると思いました。

前回の「初めてのPython、じゃんけんゲーム備忘録」でコードを見てくれた方がいたおかげで、修正してく

元記事を表示

ffmpegの処理中にtkinterのプログレスバーを表示させる

初投稿です.よろしくお願いします.
# 概要
– このようなプログレスバーを作る.
![Animation.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/736226/4938462d-6cd7-a7e1-2149-bef9b104f901.gif)

# やりたいこと
– pythonからffmpegを使って動画を処理したい.
– GUI化したい.
## GUIの内容
– ボタンを押すと処理が開始する.
– 処理中はtkinterのプログレスバー(不確定モード)のウインドウがポップアップされる.
– 処理が完了するとプログレスバーのウインドウが自動的に閉じる.

# コード
## NGな例その1
“`python
import os, subprocess
import tkinter as tk
from tkinter import ttk, messagebox

command = “ffmpeg hogehoge” # ffmpegの処理コマンド

def start():

元記事を表示

Djangoの開発で突如出てきた__eq__メソッドとは

## テーマ

私は普段Djangoを用いてCDPの開発を行っています。

そこで遭遇した`__eq__`メソッドについて調べたので備忘録として記載します。

## 環境

||バージョン|
|—|—|
|Django|3.1.1|
|Python|3.8|

※バージョン自体少し古めです。。。

## __eq__メソッドとは

`__eq__`メソッドとは、Pythonに標準で用意されている特殊メソッドのことです。

よく使用されるものは下記のようなものがあります。

– `__init__` → クラスの初期化に使用
– `__str__` → クラスオブジェクトを文字列で表示

上記の他にも多くの特殊メソッドが存在します。

では、`__eq__`はどういったメソッドなのでしょうか。

結論から言うと、**クラスオブジェクトを何によって等価であるとみなすかを設定するメソッド**です。

通常オブジェクトを比較する場合、下記のようにメモリアドレスから判断します。

“`py
class Person:
def __init__(self, first_name:

元記事を表示

Massive MIMO伝搬利得の局所性を確認するシミュレータ

# 0. はじめに
**Massive MIMO(mMIMO)は、移動体無線通信システムにおける周波数利用効率や電力効率の向上、セルに収容可能なユーザ数の増加などが期待される技術である。**
mMIMOによってセルに収容される複数ユーザの通信品質を高めるため、ユーザ間の信号干渉を補償する技術(干渉補償技術)として、LSやMMSEを用いたものからDeep Learningを用いたものまで様々提案されている[1]。
干渉補償技術は、基地局で利用されるmMIMOとユーザの間に構築される電波伝搬 (mMIMO Channel)の推定値を入力とする。**mMIMO Channelの特性を利用した干渉補償技術を開発することで、通信品質の劣化を抑えながらの計算コスト低減が期待される。**
**本稿では、文献[1]で指摘されるmMIMO Channelの特性、つまり、フーリエ変換されたMassive MIMO伝搬利得の局所性をパラメータを変えながら確認できるシミュレータ**を紹介する。

# 1. システムと伝搬モデル
システムと伝搬モデルを紹介する。

## 1.1 システム
下記は、文献[1]のF

元記事を表示

PythonでFastAPI+gunicornを使用しBasic認証をかけたAPIサーバを立てる

## 環境
Amazon Lightsail(LAMP)
以前別の用途で作ったのを再利用しただけなので、LAMPであることに特に意味はない

## uvicornでAPIサーバーを動かす

Basic認証をかけたかったので、[FastAPIでBasic認証 – Qiita](https://qiita.com/taumu/items/e448259a132bdbacf31c)の通りbasic_auth.pyを用意し、API部分を下記の通り実装
host=”0.0.0.0″を指定することでローカル以外でもアクセスできるようにしている

“`python:myserver.py
import uvicorn
from fastapi import FastAPI, Depends
from basic_auth import verify_from_api
from fastapi.responses import FileResponse

app = FastAPI()

@app.get(“/”)
async def root(_ = Depends(verify_from

元記事を表示

enumerate

### はじめに
leetcodeの問題を解いていて解けたものの計算量がO(n^2)になってしまいました。
解説にO(n)のものがあり、`enumerate`を使っていて感動したので残しておきます。

### enumerate
forループを使うとき引数にインテラブルオブジェクトを指定すると要素とindex番号を取得できる。

*インテラブルオブジェクトとは、forループを使って取り出すようなオブジェクトのこと。
リスト、辞書、タプル、文字列など

`enumerate`の使い方は以下。
“`python
nums = [1, 10, 100]
for i, num in enumerate(nums):
print(i, num)
“`
実行結果は
“`
0 1
1 10
2 100
“`

### 使った結果
使う前はfor文の中にfor文を入れてこんな感じになってました。
“`python
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:

元記事を表示

初めてのPython、じゃんけんゲーム

こんにちはkmdと申します。

初投稿になります。
タイトル通り今回はPythonで簡単なじゃんけんのプログラムを組みました。
私は普段ネットワークの畑にいるためプログラムについてほぼ全くの無知です…

自動化やRPAを最近職場で見ることがあり、私も興味を持ったためプログラミングへ挑戦することにしました。
Udemyで少し勉強して基本的な?もので書けたと思います。

今回はさわり程度でアルゴリズムを理解するのに苦労しました。

“`janken.py
import random

print(‘じゃんけんをします。 手を選んでね \n’)

global human
global com

def nyuryoku():
global human
human = int(input(‘1:グー 2:チョキ 3:パー \n —> ‘))
if human not in [1, 2, 3]:
print(‘1か2か3を入力してください’)
nyuryoku()
else:
janken()

def

元記事を表示

【AtCoder】ABC288 のA,B,C における Python解説

ABC 288のA,B,C 問題を解くために考えたこと、ACできるPython3(PyPy3)コードを紹介します。

この記事は @u2dayo さんの記事を参考にしています。見たことのない方はそちらもご覧ください。とても勉強になります。

また、問題の難易度を表す指標を [Atcoder Problems](https://kenkoooo.com/atcoder/#/table/tsuru1471) から引用しています。このサイトは勉強した問題を管理するのにとてもオススメです。

質問やご指摘はこちらまで
Twitter : [Waaa1471](https://twitter.com/Waaaa1471)

作者プロフィール
Atcoder :[緑 910](https://atcoder.jp/users/tsuru1471)
230204 現在

# 目次
[はじめに](#はじめに)
[A.Many A+B Problems](#amany-ab-problems)
[B.Qualification Contest](#bqualification-contest)
[C

元記事を表示

Python + Tkinter – 統計的な調査に要する標本サイズを算出するアプリ

Tkinter学習の一環で統計的な調査に必要なサンプル数を算出するアプリを作ってみました。「統計WEB」の母比率の区間推定における必要なサンプルサイズの解説ページを参考に制作しました。

https://bellcurve.jp/statistics/blog/14347.html

# コード

“`python

from tkinter import *
from tkinter import font
from scipy.stats import norm

#ウィンドウのタイトル+サイズ
window = Tk()
window.title(“標本サイズ計算機”)
window.minsize(width=600, height=450)
window.config(padx=50, pady=20)

myfont = font.Font(family=’Helvetica’, size=20, weight=’bold’)
myfont_result = font.Font(family=’Helvetica’, size=24, weight=’bold’)
myf

元記事を表示

【AtCoder】ABC157E 「 Simple String Queries 」Python解説

# E.Simple String Queries

[問題ページ](https://atcoder.jp/contests/abc157/tasks/abc157_e)

難易度 : 1443

# 考察

type1 は **一点更新**、type2は **区間取得** 問題です。したがって、このクエリを高速に処理するためには **Segment Tree** を利用するのが良さそうです。

あとは、区間に登場するアルファベットの種類をどうやって管理するかを考えます。これにはいくつかの手段があります。

## 解法➀ アルファベットごとにセグ木を持つ

欲張って全てのアルファベットについて同時に考えようとするから状況が難しくなっています。
それよりも、アルファベットごとに独立に考えるほうが簡単です。つまり、**区間 $[l,r)$ 内に対象のアルファベットが含まれるか(存在するか) を求めることにします。**

そのためにはアルファベットごとに管理仕分ける必要があるので、**26本のセグメントツリー**を作成します。

元記事を表示

Pythonのself

### はじめに
最近pythonを勉強していて出会ったselfが少し曖昧だったので少しまとめておく。

### クラスとは
オブジェクトを生成する型のようなもの。
以下のように使われる。
“`python:qiita.py
class className():
pass

instance = className()
“`

### selfとは
インスタンス自身のこと。
以下のように使われる。
“`python
class className():
def __init__(self, strA, strB):
self.strA = strA
self.strB = strB

instance = className(“hello”, “qiita”)
print(instance.strA)
print(instance.strB)
“`
このコードでいう`instance`が`self`なのではないかという認識。

### 注意点
これは面白いなと思ったのがpythonはクラス変数にもインスタンス変数にも値がある場合は

元記事を表示

DFS(深さ優先探索)でサイクル検出を考える【python実装】

## 有効サイクルとは

有効サイクルとは、下の図のように、例えばノード 0 から開始し、0 → 1 → 2 → 1 → 2 → 1 … というように 1 と 2 を何度も繰り返し周回するような形です。
s1

## サイクル検出 – 発想1

サイクルを検出するために、次のような手順を踏むことができます。

1. グラフをDFS(深さ優先探索)で探索(ノードのスタート地点は、`for`文を使って、`0`から`n`までを全探索する)
2. 訪れたノードを記録する(`visited[crr] = True`などとしておく)
3. 次の行き先ノードで、すでに訪れていれば(`visited[nxt] = True`)、サイクルと判定します。

この手順を踏めば、大体うまく行きそうです。

**コードのざっくりとした

元記事を表示

OTHERカテゴリの最新記事