静かなる名辞

pythonとプログラミングのこと


2020-01-01から1年間の記事一覧

numbaとnumpy.emptyでbool配列が作れないとき

タイトル通りのことをやろうとして、なんかエラーになったんですよね。 import numpy as np from numba import jit @jit("b1[:]()", nopython=True) def f(): a = np.empty(100, np.bool) return a f() 動きそうに見えますが、 Traceback (most recent call …

concurrent.futuresはなかなか便利かもしれない

概要 「いまさら?」と思われるかもしれませんが、concurrent.futuresを使う機会があり、けっこう幸せでした。 本当に「いまさら?」なのですが、どういうとき便利でどういう風に使えるのか書いておきます。 リファレンス concurrent.futures -- 並列タスク…

ThreadPoolExecutorのinitializerについて調べたのでメモ

概要 ThreadPoolExecutorにはinitializerという便利そうなオプションがあります。でもリファレンスの説明があっさりしていて、挙動がよくわからなかったので調べました。 先に断っておくと、このオプションはPython3.7で追加されたもので、それ以前のバージ…

Pythonで遅いサブプロセスをスレッド並列でたくさん叩く

概要 いつ使うんだと言われてしまうPythonのスレッドですが、Pythonの外で遅い原因があるときは高速化に威力を発揮します。 たとえばこんな感じです。言語はbashです。 #!/bin/bash sleep 3 echo "hoge" 特にひねりはありません。slow_command.shとでもして…

Pythonの文字列は同じ長さでもメモリ消費量が違うときがある

概要 Pythonの文字列は、内容によって一文字の幅が違います。 なお、Python3のstrを前提にさせてください。 実験 sys.getsizeofで測ってみます。これを使うのはちょっと議論の余地がありますが、 object のサイズをバイト数で返します。object は任意の型の…

Pythonの文字列メソッドとバイト列の微妙な関係

Python3になってからは普段あまり気にしなくても良いようになりましたが、Pythonの文字列っぽい型にはstrとbytesがあります*1。そして、strもbytesも同じようなメソッドを実装してくれています。組み込み型 — Python 3.8.2 ドキュメント組み込み型 — Python …

DataFrameをprintしたときヘッダの日本語の列名がずれないようにする

日本語の列名のDataFrameを扱うことは、日本人のpandasユーザにとってはありがちな展開だと思うのですが、問題はprintするとヘッダがずれてしまうことです。 >>> import pandas as pd >>> pd.DataFrame({"あああ":[1, 2], "いいい":[3, 4], "ううう":[5, 6],…

numbaとnumpyで速いループ処理を書くためのガイド(スレッド並列化のおまけつき)(実はポエム)

はじめに この記事は「Pythonおっせーよ」と思っている、そこのあなたのためのものです。 PythonはLLなので遅いです。その分、楽に書けるし、動的型付けでダイナミックなことができて「楽しぃぃいい」のですが、それでも遅くて困るときがあります。特に数値…

scikit-learnのStandardScalerで疎行列型のまま標準化する

ことのあらまし データの標準化は機械学習の前処理としてとても重要です。そして疎行列型データ構造は、スパースなデータを表現するためにはとても適しています。 残念ながら、普通に疎行列型を標準化しようとすると、疎行列性が失せます。考えてみればわか…

【python】zipを使ってn-gram列を生成する

はじめに n-gramは自然言語処理でよく使われる方法です。n-gram - Wikipedia さて、以下のような関数を作りたいとします。 n_gram("abcde", n=2, sep="-") # ["a-b", "b-c", "c-d", "d-e"] n=2ならbigram, n=3ならtrigramという言い方があります。さて、たと…