C++のbitsetに関するメモ

競技プログラミングで使いたいと思いつつずっと未履修だったbitsetの使い方を勉強しました。 基本操作 以下ではすべて以下が書かれているものとします。 #include <bitset> #include <iostream> using namespace std; 初期化は、文字列を与えるか、整数を与えるかで行えます。 </iostream></bitset>…

nkfの使い方のメモ

ファイルの文字コードと改行コードを調べる nkf --guessを使います。 $ nkf --guess a.cpp UTF-8 (CRLF) UTF-8 (BOM付)の場合は以下のように表示されます。 $ nkf --guess a.cpp UTF-8 (BOM) (CRLF) 文字コードや改行コードを変換する 例えば改行コードをCRL…

lessとlvの使い方の比較

これまで私はずっとlvというテキストビューワーを癖で使い続けてきました。 lvはShift_JISやeuc_jpのファイルも文字化けなしで閲覧できるメリットがありますが、 最近はそもそもutf-8以外のファイルを扱うことがほぼなくなってきて、このメリットが薄くなっ…

Pythonのインデント系エラーと戦う

Pythonスクリプトを書いてflake8にかけると、インデント量や改行タイミングの微妙な違反によって E125 continuation line with same indent as next logical line E129 visually indented line with same indent as next logical line といったエラーが出ま…

NumPyで2つのベクトル配列に対して順に内積を計算

2つの同型のベクトル配列a, bがあったとします。shapeは、ベクトルの次元をD、ベクトルの数をNとして(N, D)だとします。 0番目からN-1番目まで順に内積を取っていき長さNの結果を得ることを考えます。専用の命令があるのかと思ったらどうやらないようで、 ht…

Pythonスクリプトのテンプレートを考えてみた

Pythonの書き捨てスクリプトを書く速度を上げられるように、Pythonスクリプトのテンプレートを考えてみました。 経験上、どんなスクリプトでも以下を心がけると良いことが多いです。 コードは全部メイン関数の中に入れて、グローバル変数は許容しない 出力は…

bashスクリプトでset -uしているときの unbound variable を回避する

bashスクリプトの定番テクニックで、set -uを冒頭に書いておくことで、未定義の変数をうっかり使った時点でスクリプトを終了させるようにする、というものがあります( 参考 )。しかし、PATHやPYTHONPATHにパスを追加するときに困ることがあります。例えば…

std::setやstd::multisetで末尾の要素を削除する

C++

std::setやstd::multisetで末尾の要素を削除するには、https://www.geeksforgeeks.org/how-to-delete-last-element-from-a-set-in-c/ で紹介されているテクニックを使います。例えばsをstd::setのオブジェクトとした場合、std::prev(s.end()) が末尾の要素を…

NumPyでベクトルの長さを1に正規化

NumPyでベクトルの長さを1に正規化するには、np.linalg.normを使います。 ベクトルの例 例えば、要素数3のベクトルの長さ(より正確には、ユークリッド距離。すなわちL2ノルム)を1に正規化するには以下のようにします。 vec = np.array([3.0, 4.0, 5.0]) un…

random.randint()とnp.random.randint()の定義の違い

Python 3の random.randint() と NumPy の np.random.randint() には次のような微妙だが重大な違いがあります。 random.randint(a, b) a以上b以下の整数を1個選んで返します。以下のコードで、random.randint(3, 7)が3以上7以下の整数をランダムに生成するこ…

NumPyのブロードキャストのルール

NumPyのブロードキャストのルールについて曖昧にしか理解していなかったので調べました。わかってしまえば簡単です。 2つのarrayの間でブロードキャストができるかどうかは、2つのarrayのshapeによってのみ決まります。アルゴリズムは以下です。 もし2つのa…

tensorflow.kerasでMNIST分類器を学習

tensorflowの初心者向けページをもとに、tensorflow.kerasのチュートリアル記事を読みながら、MNISTデータセットでかんたんな分類器を学習するサンプルコードを作成しました。

NumPyのconcatenate(), vstack(), hstack(), dstack(), stack()の違い

NumPyのconcatenate(), vstack(), hstack(), dstack(), stack()の違い について毎回混乱するのでまとめました。 concatenate() 複数のアレイを、既存の軸に沿って結合する関数です。 基本的に、後述するvstack(), hstack(), dstack()の上位互換がconcatenate…

CygwinからWSLに移行するときのメモ

多分15年以上Cygwinを使い続けていますが、いい加減WSLに移行していこうと考えています。以下、CygwinでできていたことをWSLでやるためにはどうすればいいかというメモです。 ExplorerのファイルをDrag & Dropしたときに/mntで始まるパスに自動変換 Cygwinで…

Ubuntu 20.04にemacsをインストール

WSL2上のUbuntu 20.04にemacsをインストールしようとして $ sudo apt install emacs としたところインストールできませんでした(エラーメッセージは記録し忘れました)。 お決まりの $ sudo apt update $ sudo apt upgrade したあともう一度最初のコマンド…

emacsの検索・置換に関するメモ

emacsを使うとき、検索はC-s、置換はM-%を使う以上のことをこれまでしてきませんでした。より高度な検索・置換の仕方をまとめました。 検索 単語単位で検索 いくつか方法があります。ユースケースに応じて使い分けてください。 1つ目の方法は、C-s M-s w と…

scikit-imageを使ってサンプル画像を簡単に取得

scikit-imageというPythonのライブラリを使うと、サンプル画像をさっと取ってくることができます。 コード例は以下です。 import skimage print("scikit-image version: {}".format(skimage.__version__)) coffee_image = skimage.data.coffee() print(coffe…

travis-ci.orgでCIを動かしていたリポジトリをtravis-ci.comに移行

久々にtravis-ci.orgにアクセスしたら "Since June 15th, 2021, the building on travis-ci.org is ceased. Please use travis-ci.com from now on." とメッセージが出たので、慌ててtravis-ci.comに移行したときのメモ。あとから思い出しながら書いたので抜…

Python 3のsubprocess.run()の使い方

Python 3で外部コマンドを呼ぶにはsubprocessモジュールで提供されているrun()を使うことが推奨されるのですが、毎回使い方を調べてしまっているので自分用にまとめます。順を追っていかないと引数の意味を理解しづらいところがあるので、冗長ですが簡単な例…

Python 3で現在の日時を表示

毎回調べてしまっているのでメモ。 import datetime now = datetime.datetime.now() print(now) で 2021-05-31 21:10:18.332820 というふうに表示できるのだけれど、個人的には秒までで十分なことが多いので、以下のようにするのが多いです。 import datetim…

Python 3のunittestを使い始めるためのメモ

Pythonのunittestをちゃんと使ったことがなかったので、使い方について調べてまとめました。Windows 10のAnaconda Python 3.8.5で動作確認しています。 もっとも小さな例 被テストコードとテストコードとを同一のスクリプトに記述した小さな例を以下に示しま…

matplotlibでグラフを保存するときのテンプレート

サーバにてmatplotlibを使ってグラフを作成し、ファイルに保存することがよくあるのですが、実装するたびにググりまくって非効率なので、私が高確率で使う機能をテンプレ化しました。 さっそくコードを以下に示します。 import matplotlib import matplotlib…

std::vectorのresizeとassignの違い (C++)

C++

恥ずかしながらC++のvectorのassign(n, val)という関数を知らなかったのでメモです。 よく似た関数に、resize(n, val)という関数があります。以下のコードで挙動を比較してみます。 #include <iostream> #include <vector> void print_vector(const std::vector<int> &vec) { for (a</int></vector></iostream>…

PowerShellのTab補完をbashのようにする

Windows PowerShell (この記事の執筆時点でバージョンは5.1) でTabキーを押したときの補完方法をbashのようにする方法について調べました。 デフォルトでの補完方法 まず、デフォルトでのWindows PowerShellの補完方法について説明します。例として、2021010…

PowerShellからAnaconda Pythonの仮想環境を使えるようにしたときのメモ

PowerShellにてAnaconda Pythonの仮想環境をactivateしようとしてactivate (仮想環境名)というコマンドを実行しても何も起こりません。これを修正しようとしたときにやったことのメモです。注:私はAnaconda PythonにもPowerShellにも精通していないため、こ…

Visual Studio Codeのショートカットキー集

普段使わなくて覚えられないものを使いこなせるようになるようメモ書き。Windowsで動作確認しています。Ctrl / Shift / Altのコンビネーションが複雑で覚えるのが大変です… カーソル移動 Ctrl + Enter: カーソルがどこにあっても、カーソルの下に空白行を作…

Python 3のsqlite3モジュールでSQLiteの練習

Python 3の標準ライブラリであるsqlite3を使って、SQLite と呼ばれるデータベースを触ってみるメモです。 基本 テーブルを作成 以下のコードでは、都道府県のデータを格納するprefecturesという名前のテーブルを定義します。このテーブルは、name(都道府県名…

TensorFlow / Kerasにおけるlogitsの意味

TensorFlowやKerasを使うと遭遇する logits という用語、ざっと検索してもすぐに意味が出てこなかったので書いておきます。なお、この用語は複数の意味を持つ単語なので注意願います。この記事ではあくまで TensorFlow / Keras でのlogitsの意味を説明してい…

Pythonのexceptionをprint()して何も出ない原因

Python 3にて以下のように例外オブジェクトをprint()するコード try: raise ValueError except Exception as e: print(e) を実行しても、以下のように何も出力されません。 結論からいうと、上記のコードを以下のように修正すると try: raise ValueError('va…

Visual Studio Codeの基本設定

共有設定を使う場合 2020年3月頃からプレビュー機能として提供されている、設定を共有する機能を有効にすることで、複数のマシンでVSCodeの設定を共有できます。参考: 「Visual Studio Code」が設定の同期に対応、Insider版でテスト中 - 窓の杜 左下の歯車…