Python実践入門 ── 言語の力を引き出し、開発効率を高める (WEB+DB PRESS plusシリーズ) 目次 目次 はじめに 通常のclassとdataclassの比較 dataclassの良いところ データを格納する箱であることを明確にできる。 クラス定義を短くかける 型情報を書くことでデータ構造が見やすくなる。 Printしたときに、そのままオブジェクトの中身を表示できる。 asdict関数でdictに変換できる。(Dictから簡単にJSONにも変換できる) Dict(JSON)からdataclassを作ることもできる Frozen引数を使うことで、簡単にイミュータブルにもできる。 データが作られたときに、自動後処理機能を追加することができる。 dataclassの残念なところ コレクションの初期化 参考資料 MyEnigma Supporters はじめに C++ユーザやJ
はじめに データ構造の多くは、破壊的な操作を提供しています。例えば配列はある要素を別の値に更新する操作を提供しています。配列の更新操作の処理時間は配列の長さや値に依存しないという点で優れています。 一方で、データ構造に対して非破壊的な操作を実行したい場面もあるかと思います。例えば配列を累積値とするreduce/fold処理(畳み込み演算)の各計算においては非破壊的に新しい配列を生成すべきです(破壊後の配列を計算結果とすることも可能ですが健全な使い方とは言い難いでしょう)。あるいはReactのステートフックのstate更新のように更新後のオブジェクトを新たにセットする必要がある場合、下記のように非破壊的に新しくオブジェクトを生成しそれをセットさせることになります。
最近、このモジュールを妻に紹介したところ、そのシンプルさと実用性に驚いていました。 joblib joblibの存在は以前から知ってはいたものの、実際のところはよく理解しておらず、いろいろな機能を寄せ集めたようなモジュールだと思っていました。まあ、その印象は今もあまり変わりませんが、実は非常に便利なモジュールだったのです。私は Flowminder の同僚から再度joblibを勧められて、このモジュールをデータ分析用のコードに幅広く使用しました。では、その機能について紹介しましょう。joblibは大きく分けて、 キャッシング 、 並列化 、 永続化 (データの保存と読み込み)の3つの機能から成ります。実を言うと、私はまだ並列プログラミングの機能は使ったことがないのですが、あとの2つの機能は頻繁に使ってきました。 キャッシング機能とは、シンプルなデコレータを使って、関数を簡単に”メモ化”する
本エントリではPythonのJoblibがもつキャッシュ機能によって同じ計算を省略し、処理を高速化するための方法を説明する。このエントリを読むことで、関数をキャッシュ可能にする方法、numpyのarrayをメモリーマップを使って読み込む方法、参照を使ってデータにアクセスする方法がわかる。 目次: Joblibとは 1. 計算結果のキャッシュが可能 2. 並列化が容易 3. 高速、高圧縮な永続化 環境 Joblibのインストール Memoryを使って計算結果をキャッシュする キャッシュの簡単な例 NumPyのデータを扱う関数をキャッシュ可能にする メモリーマップを使った高速なキャッシュの参照 キャッシュされた結果の参照を取得する。 Joblibを使ってテキストを単語のIDに変換する処理を高速化する まとめ Joblibとは JoblibはPythonにおけるパイプライン処理の効率化をするため
※本稿は,ビジネスデータサイエンス研究会開催の『ハイパフォーマンスPython 』勉強会【#3】における発表内容の一部を整理し記事化したものです。 内容 本稿では,オライリーから出ているハイパフォーマンスPythonの7章 Cにコンパイルする, 9章 multiprocessingモジュールの内容をもとに,CythonとCPUレベルでの並列処理に絞っていくつかのPython高速化手法を試してみた結果をまとめます。 まず前半では,実用性は皆無だけどとりあえず簡単なコードを題材にして比較を行います。 後半では記事を改めてもう少し実用性のあるコードの高速化を行います。 ソースコードはこちらにアップしております。 実行環境 作業環境(Dockerコンテナ) OS : Ubuntu 18.04.1 CPU数 : 4 メモリ容量 : 16GB ホストマシン OS : Windows10 Home Ed
やったこと pythonで2次元配列データを一時保存するときによく使う pickle.dump joblib.dump pyarrowに変換してparquet保存 pd.write_csv のそれぞれについて読み書き速度と保存容量を比較しました。 結論 圧縮率と速度ならpickle protocol=4 一部だけ読んだり書いたりを繰り返すような場合はpyarrowでparquet保存 が良さそう 試行環境 CPU: Xeon E5-2630 x 2 chip VRAM: 128GB Windows8 64bit python 3.6 比較に使ったデータ 機械学習用の特徴量データで試行しました ・pandas.DataFrameの 536行178886列 0.77GB ・pandas.DataFrameの4803行178886列 6.87GB 比較結果 0.77GBのDataFrame 6.
PythonはGIL (グローバルインタプリタロック)というものがかかっており、基本的にただコードを書いただけでは複数のCPUコアがある場合にそのリソースを全て使い切ることが出来ません。 しかし、大量のデータを処理する時などにはマシンのCPUリソースを全て使って出来るだけ高速に計算させたい時がありますね。 Python 並列処理などのキーワードで検索すると標準ライブラリによるmultiprocessingモジュールの解説がよく見られるので、こちらを利用されている方も多いのではないでしょうか。 がっつり並列処理を組み込んだシステムを作る際にはこちらのモジュールを使って作り込みたいところですが、書き捨てのコードを書くだけの時には正直ちょっと面倒です… そこで、よりお手軽にサクっと並列処理を実行出来るJoblibというモジュールについて紹介したいと思います。 コード量が減るのはもちろんのこと、他
これは何か? pickle でファイル保存できるのとほぼ同じ書き方で保存できる joblib.dump/joblib.load について調べた。 pickle と joblib の比較について。compress を使うと joblib の方がファイルサイズが小さくなる。読み込み速度も変わるかもしれない。 joblib の compress の値は3程度が良いと言われているが、実際調べてると大体3くらいでちょうどいいことが確認できた。 背景 pickleの代わりにjoblibを使って永続化する - 計算物理屋の研究備忘録 joblib.dump/load は pickle とほぼ同じ使い方?ただし compress オプションを指定しないと圧縮してくれないので、圧縮レベルを3くらいにするのがよいとか。 https://t.co/TAvMnIlLO5— Tak (@takaishikawa42
今回はPythonのjoblibパッケージを用いて手軽に並列処理を行う方法をご紹介したいと思います。 joblib 『Joblib』とは Joblibパッケージはデータの外部保存や並列処理・並行処理などを簡単に行うために用いるパッケージです。 現在市販されているPCのCUPはマルチコア・マルチスレッドを機能を持つものが一般的となっていますが、デフォルトのPythonではそのうちの1スレッドしか処理に用いられないので、大抵の場合リソースを持て余すことになります。 そこでJoblibを用いた並列処理です。 並列処理を行うことでCUPのリソースをフル活用し、同時に複数の処理を走らせることが出来る様にできます。 Joblibのイメージ joblibの処理の流れとしては『あるリスト』を『ある関数』に送り、最終的に「処理結果のリスト」を得るといった感じです。 イメージ 処理の内容によっては途中で早い・
2019年9月16、17日、日本最大のPythonの祭典である「PyCon JP 2019」が開催されました。「Python New Era」をキャッチコピーに、日本だけでなく世界各地からPythonエンジニアたちが一堂に会し、さまざまな知見を共有します。プレゼンテーション「Pythonで始めてみよう関数型プログラミング」に登壇したのは、株式会社SQUEEZEの寺嶋哲氏。講演資料はこちら 不変/永続データ構造を提供するパッケージ寺嶋哲氏:続いて、不変/永続データ構造についてです。 listを操作する関数の問題点について、例題で見ていきましょう。add_mangoは果物名の文字列のlistをとって、mangoをそのlistに足して返します。change_from_apple_to_bananaは、同じようにlistをとってappleを探して、bananaに入れ替えて返します。 その下
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く