Python3関連のことを調べてみた2022年04月09日

Python3関連のことを調べてみた2022年04月09日

pythonで整数のべき乗の計算にmath.powは使わない(pow() or **を使う)

## 結論
べき乗の計算時はpow or ** を使おう

## math.powの仕様

[公式ドキュメント](https://docs.python.org/ja/3/library/math.html)より引用する
> math.pow(x, y)
x の y 乗を返します。例外的な場合については、 C99 標準の付録 ‘F’ に可能な限り従います。特に、 pow(1.0, x) と pow(x, 0.0) は、たとえ x が零や NaN でも、常に 1.0 を返します。もし x と y の両方が有限の値で、 x が負、 y が整数でない場合、 pow(x, y) は未定義で、 ValueError を送出します。
組み込みの ** 演算子と違って、 math.pow() は両方の引数を float 型に変換します。正確な整数の冪乗を計算するには ** もしくは組み込みの pow() 関数を使ってください

math.pow()は両方の引数をfloatに変換して計算するため、正しくない
※math.pow()の返り値はfloatであることから、floatに変換していることがわかり

元記事を表示

Scipyで多変数関数の最小値を求める(逐次二次計画法の利用)

# はじめに
pythonの`scipy`モジュールを使用して多変数関数の最小値を求める方法について紹介します。
`scipy`の公式レファレンスには多くの方法が記載されていますが、今回は特に逐次二次計画法(SLSQP)について取り上げます。

* [scipyの公式レファレンスはこちら](https://docs.scipy.org/doc/scipy-0.18.1/reference/optimize.html)

# 実行環境
OS : Windows10
環境 : Anaconda(エディタ:Jupyter Notebook)
言語 : Python3
使用ライブラリ : scpiy,numpy

# 逐次二次計画法(SLSQP)
`逐次二次計画法 (Sequenitial Least Quadratic Programming)` とは、制約付き非線形計画問題を解く手法の1つです。

最適化したい目的関数に対して、非線形な等式制約条件式と不等式制約条件式が複数ある場合に適用することができます。

詳しい理論については以下のリンクから参照してみてください。
* [株式会社

元記事を表示

超初心者がAtcoder ProblemsのC問題を231回から240回までをpythonで解いてみた

解き方を忘れないためにまとめてるだけなのでコードはめちゃくちゃ不細工です、ここもっと良くできるよって場所あったら教えていただけるとありがたいです!!

231 Counting 2

https://atcoder.jp/contests/abc231/tasks/abc231_c

“`python:practice.py
import bisect

n,q = map(int, input().split())
alist = sorted(list(map(int, input().split())))
for _ in range(q):
x = int(input())
print(n – bisect.bisect_left(alist,x))
“`

この問題はbisectを使うだけで簡単にとけてしまいます。まずbisect_leftを使って、alistの中でxの数字を挿入できる位置のindex番号を取得します(xより小さい数字の数)。次に、xより大きい数字の数を調べ上げるために、全体数nからさっき取得した値を引き出力すればACです

元記事を表示

Python3 DynamoDBにAWS Lambdaからkintoneのレコードを登録する方法

DynamoDBにLambdaからkintoneのレコードを登録する方法のメモです。

# 環境

* Cloud9
* Python3.9
* pykintoneライブラリ

# サンプルコード

“`python
import os
import botocore
import boto3
import pykintone

class FetchError(Exception):
def __init__(self, error, message=”kintone record fetch error:”):
self.error = error
self.message = message
super().__init__(self.message)
def __str__(self):
return f'{self.message} -> {self.error}’

def lambda_handler(event, context):

try:
domain = o

元記事を表示

Python + SQLite3をJSONで運用する

# SQLiteでJSON

要件とかで列が増えたりすると面倒ですよね、特にView表とかあると面倒すぎます。
**「いっそデータベースにJSONそのまま突っ込んじゃえばいいんじゃん?」**
って思ったらSQLite3ってばJSONにそもそも対応しているんですよね。

## とりあえずクラスを用意。

ざっくりでっち上げました。
以前にポストしたDBを簡単に使う~の焼き直しみたいなものです。
以前のは普通のTableへ更新するためにdictから変換をしていましたが今回のはそのまま突っ込んでます。

**database.py**

“`python
import sqlite3
import json

class DB:
def __init__(self, filePath=None):
if filePath != None:
self.filePath = filePath

def open(self, filePath=None):
if filePath != None:

元記事を表示

Python3でキャンセル可能なThreadを作る

# 前提
threading.Threadのバックエンドとしてpthreadが用いられている環境,要はPOSIX環境で動くCPythonを前提にしています。
JythonとかWindows上のCPythonとかは本記事の対象外です。

何をやってるのかわからない方は,わからないまま本記事のコードを利用するより,別の方法を探したほうがいいです。

# 実装
“`python
import threading
import ctypes
import errno

class CancelabelThread(threading.Thread):
def cancel(self,timeout=0.00001):
# thread IDを取得
tid=self.ident

# スレッドが未開始または終了済の場合は何もしない
if((tid is None) or (not self.is_alive())):
return

# libpthread.soをロード(1.)
libpthread=ctypes.cdl

元記事を表示

S3バケットに外部からファイルのやり取りを行う(期限付きURL)

### AWS外部から特定のS3バケットにあるファイルをダウンロード&アップロードを行いたい

S3の期限付きURLをLambdaにて生成し、URLにアクセスしファイルのダウンロード&アップロードを行う

(補足)
手動でやる場合は、Lambdaを使わずとも、S3バケットにて2クリック程で期限付きURLの作成ができます。
今回は、URLの生成を(ファイル検知などで)自動化したかっため、Lambdaにて作成しました。

(やった手順)
① S3バケットの作成
② Lambdaの作成
③ Lambda(実行ロール)の設定
④ Lambda実行&ダウンロード&アップロード確認

### ①S3バケットの作成
説明省略。普通に作るだけ。

### ②Lambdaの作成
(URLをメールで連携したかったので…その処理も含まれています。)
(必要に応じて削除してください)

詰まった点:generate_presigned_urlでURL生成しても、S3ファイルのパスにリージョンが含まれなかった。
・import from 設定
・boto3.client(‘s3’, config=Config(

元記事を表示

Python Socket通信

# 概要
pythonで Socket通信に関して学んだので、その実際にSocket通信(TCP)するPG作ってみました。

# 前提
* Python 3.9.7

# 目次

Ⅰ. Socket Server
Ⅱ. Socket Client

## Ⅰ.Socket Server

元々、socket自体は入っているので、インストール不要。なので、そのまま、importを行う。

“`
import socket
“`

まず、Serverを作成していきます。

“`
import socket

# with構文使用することで、close不要になるため使用します。
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((socket.gethostname(), 50000)) # IPとポート指定
s.listen(10) # サーバなので、Listen状態にします。10は、キューに貯める数。

# 何度もレスポンスを返せる

元記事を表示

pypyはC言語並に早かった(素数編) cython-annotationの例有

Pythonが大好きなのですが、処理が遅くて頭を悩ませています。

どうにか早くならないかとpypyとcython(pure python mode)でやってみました。

…すみません、ソースコードはこちらの方のを使わせていただきました。
https://qiita.com/L_A_P_119611/items/40f6c71c136fbe3cf32a

## 環境
MacOS: catalina
CPU: i9
– それぞれ3回計測した結果を載せています。

## pythonの結果
python3.9での実行結果は下記通りでした。
(arrangeをnumpyのに変えたら早くなるのだろうか…)
python3 src_sosu1.py 123456789
123456789 = 3 * 3 * 3607 * 3803
所要時間は39.019531秒です
所要時間は34.007243秒です
所要時間は35.707815秒です

## javaの結果
java Factrization 123456789
123456789 = 3803 * 3607 * 3 * 3
所要

元記事を表示

ローカルPC環境にMinicondaとPHi-C仮想環境を構築

Hi-Cデータから動的ゲノム状態を理解するための「[PHi-C](https://github.com/soyashinkai/PHi-C2)」を実行するための計算環境構築を説明します。
すでにPython環境を利用している人は[PHi-C仮想環境を構築](https://qiita.com/soyashinkai/items/49cefc917eb2b1a7c44c#phi-c%E4%BB%AE%E6%83%B3%E7%92%B0%E5%A2%83%E3%82%92%E6%A7%8B%E7%AF%89)から始めてください。
AnacondaによるPython環境の導入は規約上有償の場合もあるので、ここではMinicondaでの構築を説明します。

# MinicondaでPython環境を導入

### Minicondaのダウンロード
以下のMiniconda公式サイトから、使用OSに対応したインストーラーをクリックして、ローカルPCの適当なフォルダに保存する。
https://docs.conda.io/en/latest/miniconda.html

### Minicon

元記事を表示

【Python】Pythonの型名が覚えられなかったのでメモ

Java, Rubyの実務経験があり、Pythonも覚えてみたいと考えた今日このごろ。
型の種類と名前が全く一致しなかった戒め。

下記のフォーマットで自分用にメモ
###### 大枠のジャンル
“`
・Pythonでの呼び方
 ・Java, Ruby(他覚えやすかったキーワードなど)での呼び方

※あれば感想など
“`

###### 数値
“`
・int
 ・整数

・float
 ・小数点

※散々やってきたので大丈夫。小数点の計算 ^ Javaのときは「BigDicimal」を使わないとダメだぞ!と怒られた記憶がある
“`

###### 論理
“`
・bool(Yes / No)
 ・boolean
“`

###### 文字列
“`
・str
 ・String

※大した違いじゃないからまぁいいんだけど、こういう微妙な違いがあると困るよね。
“`

###### シーケンス
“`
・list
 ・ArrayList(Java)(後から追加できるからArrayListで覚える)

・tuple
 ・list(配列)(後から変更できないからlistで覚える)

元記事を表示

Python3: Google Cloud Functions で加算

フォルダー構造

“`text
$ tree
.
├── main.py
└── requirements.txt
“`

“`py:main.py
def sum_up(request):
request_json = request.get_json()
aa = 0
bb = 0
#
if ‘aa’ in request_json:
aa = int(request_json[‘aa’])

if ‘aa’ in request_json:
bb = int(request_json[‘bb’])
#
sum = aa + bb
rvalue = {}
rvalue[‘sum’] = sum
rvalue[‘aa’] = aa
rvalue[‘bb’] = bb

return rvalue
“`

“`text:requirements.txt
# Function dependencies, for example:
# package>=version
“`

## ローカルでテスト ##

サーバーの起動

“`bash
f

元記事を表示

Watson Knowledg Catalog for CP4D ~API色々~

# はじめに
Watson Knowledge Catalog for CP4D(WKC for CP4D)のAPIドキュメントに記載されている情報が少なく、APIで色々実施しようとすると苦労するので、今まで調べた内容を備忘録としてメモっておきます。
調べたAPIが増えたら、適宜この記事を更新しようと思います。

あくまでも例です。より良い方法が他にもあるかもしれません。そして、コーディング初心者なのでその点ご了承ください。

**試した環境 : WKC for CP4D 4.0.5**

# 参考資料
全体的なAPI Reference
[Watson Data API](https://cloud.ibm.com/apidocs/watson-data-api#introduction)

アセット(資産)に特化したAPI Reference
実は、こっちの方が詳しい。
[Catalog and Asset Management Service](https://api.dataplatform.cloud.ibm.com/v2/cams/explorer/#/)

# 認証情報の

元記事を表示

Python3: Google Cloud Functions の使い方

次のような関数を作成します。

Project: project-apr06
関数名: function-apr06
とします。

“`py:main.py
def hello_test(request):
“””Responds to any HTTP request.
Args:
request (flask.Request): HTTP request object.
Returns:
The response text or any set of values that can be turned into a
Response object using
`make_response `.
“””
request_json = request.get_json()
if request.args and ‘message’ in reque

元記事を表示

PyCharm Community EditionでFlaskアプリケーションを起動する設定

# 目的
PyCharm Community EditionでFlaskアプリケーションを起動する設定の覚書です

# 注意
PyCharm Professionalを使えば Flaskサポートは標準搭載されており、このページの手順は不要です。
Python入門中だし、最初はPyCharm Community Editionでいいかなという気持ちで使っています。

https://www.jetbrains.com/help/pycharm/flask.html

# 環境
– macOS Monterey
– PyCharm Community 2021.3.3
– Python 3.9.10

ソースコードは Flask Tutorialの [Blog Blueprint](https://flask.palletsprojects.com/en/2.1.x/tutorial/blog/) まで終わらせたものを使っています

# 手順
1. PyCharm Community Editionでflaskを使ったソースコードを開く
1. 右上のプルダウンから`Edit Config

元記事を表示

CapsGANをKerasで

# 概要
CapsNetを用いたGAN:CapsGANをKerasで構築して学習させてみます。ここで構築するCapsGANは、Discriminator部分のみがCapsNetによって構築されたものとなります。

CapsNetについては[私が以前書いた記事](https://qiita.com/heart_mugi/items/c1cb6d29d057a33acbae)をお読みください。

# 構築
早速、CapsGANを構築していきます。
## CapsNet
Discriminatorに用いるCapsNetを定義します。当記事では詳しく説明しません。
“`python
class Length(layers.Layer):
“””
Compute the length of vectors. This is used to compute a Tensor that has the same shape with y_true in margin_loss.
Using this layer as model’s output can directly

元記事を表示

Python3: Elastic Cloud に ndjson 形式のデータを投入する

こちらにあるデータを使いました。
[新型コロナワクチンの接種状況](https://info.vrs.digital.go.jp/dashboard/)

データの取得

“`bash
wget https://data.vrs.digital.go.jp/vaccination/opendata/latest/prefecture.ndjson
“`

“`py:elastic_cloud_insert_ndjson.py
#! /usr/bin/python
#
# elastic_cloud_insert_ndjson.py
#
# Apr/04/2022
# ——————————————————————
import sys
import json
import ndjson
import requests
# ——————————————————————
def file_to_s

元記事を表示

「X」記号を検出するOpenCVライン検出

行内のX記号を検出する必要がある画像があります。
画像:
![dpUhO.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603249/927d24f1-3cd1-a18a-d833-f00898f5c519.png)

上の画像を見るとわかるように、線の中にX記号があります。シンボルのX座標とY座標を知りたい。この絵の中でこのシンボルを見つける方法はありますか、それとも小さいですか?
“`
import cv2
import numpy as np

def calculateCenterSpot(results):
startX, endX = results[0][0], results[0][2]
startY, endY = results[0][1], results[0][3]
centerSpotX = (endX – startX) / 2 + startX
centerSpotY = (endY – startY) / 2 + startY

元記事を表示

Python3: Elastic Cloud に API でデータを投入する

こちらと同じことを Python3 で行いました。
[Elastic Cloud に API でデータを投入する](https://qiita.com/ekzemplaro/items/5591fa43c2dc39d47a6b)

“`py:elastic_cloud_insert.py
#! /usr/bin/python
#
# elastic_cloud_insert.py
#
# Apr/04/2022
# ——————————————————————
import sys
import json
import requests
# ——————————————————————
def file_to_str_proc(file_in):
str_out = “”
try:
fp_in = open(file_in,encoding=’utf-8′)
str_out = fp_

元記事を表示

[Atcoder]python3の入力処理方法

3/26からAtCoder始めました。対戦よろしくお願いいたします。
AtCoderの入力方法は標準入力です。
普段、標準入力はあまりしないので、戸惑ってしまいました。
そのため、主な入力処理パターンをまとめました

# 入力個数が1つ(ex 1)
“`python
# int
a = int(input())
# str
a = str(input())
“`

# 入力個数が決まっているパターン(ex A B C Dが与えられるパターン)
“`python
# int
a, b, c, d = map(int, input().split())
# str
a, b, c, d = str(int, input().split())
“`

# 個数が指定されない場合(ex. A1~Anの個数が当たられるパターン)
“`python
# int
An = list(map(int,input().split()))
# str
Bn = list(map(str,input().split()))
“`

楽しく競技プログラミングしましょう!

元記事を表示

OTHERカテゴリの最新記事