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

bashで掛け算

bashで掛け算するには少し注意が必要。 以下の3パターンが考えられるが、少数を計算するときは、awkが一番楽. exprコマンド bcコマンド awkコマンド 整数の計算 exprコマンドでは掛け算の時または括弧には\が必要。 > a=3 > b=6 > expr $a \* $b 18 少数の…

macOSにリモート接続する

家のmacOSに外部から接続できるようにした際の手順をまとめます。 OSはMojaveです。 ルーターはbuffaloのやつ。 1. macOSでリモートアクセスを許可する 2. global ipの設定 3. ルーターの設定 4. セキュリティ用の設定 4.1 ログインを共通鍵認証のみにする 4…

使用port確認

jupyterをいくつか立てているときにどのportがすでに使用されているか確認するときにでも $ netstat -tan | awk '{print $4}' | grep 0.0.0.0:

Termius設定

iosからサーバーにsshできるようにするためにTermius(Termius)っていうアプリを使ってみました。 キーボードが打ちにくいのであんまり使うことはないとは思いますが、wifi環境がないところでもiphoneから接続できるので便利です。 まず、Termiusのアカウン…

16. storing data log

Problem You run an e-commerce website and want to record the last N order ids in a log. Implement a data structure to accomplish this, with the following API: record(order_id): adds the order_id to the log get_last(i): gets the i-th last e…

43. implementing stack

Problem Implement a stack that has the following method. push(val), which pushes an element onto the stack pop(), which pops off and returns the topmost element of the stack. If there are no elements in the stack, then it should throw an e…

jupyterを開く時に出るエラーについて

Traceback (most recent call last): File "/home/usrname/.pyenv/versions/anaconda3-2019.03/lib/python3.7/site-packages/traitlets/traitlets.py", line 528, in get value = obj._trait_values[self.name] KeyError: 'runtime_dir' During handling of …

jupyterでkernel選択

conda等で複数の仮想環境を入れているときにjupyterでkernelを入れ替えたい 現在利用可能なkernelの確認 $ jupyter kernelspec list Available kernels: tensorflow /home/username/.local/share/jupyter/kernels/tensorflow tensorflow2 /home/username/.lo…

CentOS installからCUDA installまで

CentOS7.6を入れて、CUDAの環境を作るまでをまとめました。 1. CentOSを入れる CentOSの初期設定 2. NVIDIA driverのインストール 2.1 nouveauの無効化 2.2 NVIDIA-Linux-***-runのinstall uninstallするときは 注意 補足:パッケージマネージャーの使用 3 c…

merge sort

アルゴリズム 数列を半分半分に分割していって並び替えたものを作る 順番を揃えつつmergeする 基本はこれだけ。最小分割単位1では何もしないこととmergeするときのアルゴリズムに注意する。 コード例 startはsortするはじめのindexで,endは最後のindex+1に…

実数を2進数表記する

問題 double型の0から1の実数を2進数表記する。 考え方 簡単な例として0.5は2進数では0.1とかける。 つまり、2倍して1のくらいが1になれば1を立てる。 コード例 #include<iostream> #include<string> using namespace std; string bitRep(double x){ string ans = "0."; wh</string></iostream>…

bit演算で値挿入

問題 最大32bit整数N, Mが与えられたときにNのjビット目からiビット目にMを挿入する。 考え方 Nのjからiビットを0に変えて、Mを挿入する 注意 ビットは0から数える。一番右が0ビット目。 コード例 #include<iostream> #include<bitset> using namespace std; unsigned int inse</bitset></iostream>…

sshfs使い方

$ sshfs usrname@hostname:/remote_path/ /local_path/ sshfsでは~を使うとエラーが出る。rootユーザーになるからとか書いてあった気がする。 $ sshfs usrname@hostname:~/remote_path/ /local_path/ fuse: invalid argument `~/remote_path/` のようなエラ…

matplotlibでいい感じで保存する

余白をなくしたいとき 以下のように保存すると余計な余白が消える。 fig = plt.figure() ax = fug.add_subplot(111) # 略 plt.savefig("sample.pdf", bbox_inches="tight", pad_inches=0.05) 論文用にデータをプロットするとき plt.rcParams['mathtext.fonts…

OpenMPでの同じ要素へのアクセス

OpenMPの並列計算で行列の同じ要素にアクセスするときに同時に書き換えるとデータが壊れる可能性がある。 atomicを使うとどれかのスレッドでアクセスしている際にその作業が終わるまで待つようになる。 何度も同じ要素にアクセする際には計算時間が遅くなる…

pgi, iccコンパイルオプション

混乱するのでまとめました。 PGI 使い方 参考サイト 公式ページ その他 Intel Compiler 使い方 メモ 参考サイト その他 一般的なこと PGI 使い方 openmpで並列化するときはとりあえずはこれでいいはず。 でも、なぜか-mp指定しなくてもOpenMPのコンパイルが…

jupyterでunixコマンド使うときの注意点

パイプで繋げるときは次のコマンドは!いらない。 例として、 !cat temp.txt | wc -l またawkを使うときには注意が必要で、{{, $$にする必要がある。 !cat temp.txt | awk '{{print $$1 " " $$2}}' ほんとはこの出力をそのままnp.loadtxtとかに渡したいけど、…

awkで重複行削除

以下のようなテキストファイルの1列目の値でuniqueな個数を数える。 # sample.txt 41 83 83 186 88 186 989 187 494 210 98 225 以下のコマンドで重複しないで1列目の値だけを表示する。 cat sample.txt | awk `a[$1]++ == 0 {print $1}' 行の数を数えると…

キューの実装

キューはFIFO(先入れ先出し)のデータ構造です。 キューがもつ操作は add(item):要素を追加する remove():先頭の要素を削除する peek(): 先頭の要素を返す isEmpty(): キューが空の場合にTure class Queue(): class Node(): def __init__(self, data): se…

リストの分割

問題 連結リストとある値xが与えられたときにxの前にxよりも小さい値が、後にxよりも大きい値が来るようにする。 考え方 xよりも小さい数のリストと大きい数のリストを作り、最後にくっつける。 時間計算量はO(N) コード例 import random class Node(): def …

間の要素の削除

問題 間のnodeだけ与えられたときにそれを削除する 考え方 削除したいnodeが次のnodeに当たるように書き換えれば良い コード例 class Node(): def __init__(self, d): self.data = d self.next = None def appendToTail(self, d): end = Node(d) n = self wh…

後ろからk番目

問題 単方向連結リストにおいて末尾から数えてk番目の要素を返す。 考え方 連結リストの長さがわからないという前提で考える。 ランナーテクニックを利用する。 2つのポインタを用意する。 前からk番目からスタート 初めからスタート 1つ目のポインタが最…

ハノイの塔

問題 ハノイの塔 3つの塔とN枚のサイズの異なる円盤がある。1つの塔から別の塔に移動させる。 1度に1つの円盤しか動かせない。 塔の一番上の円盤だけ移動できる 円盤はそれよりも大きいものの上にしか置けない。 考え方 まずは具体的にやってみる。塔をs…

スタック

スタックの実装です。 スタックのデータ構造はLIFO(後入れ先出し)です。 スタックは以下の操作ができます。 pop: スタックの一番上のデータを削除する push: スタックの一番上にデータを追加する peek: スタックの一番上の要素を返す isEmpty: スタックが…

冪集合

問題 ある集合の全ての部分集合を返す 考え方 再帰的に考える。 N-1この要素の全ての部分集合がわかっているときに、次の部分集合はどうなるか? N個目の要素を加えたsubsetsを元のsubsetsに加えれば良い。 f(n) = f(n-1) + {f(n-1), set[n]} コード例 def a…

マジックインデックス

問題 ソートされた配列からA[i] = iとなるindexを探す。配列が重複した値を持つ場合にどうするか。 考え方 2分探索的な方法で探す。 重複した値がある時は少しややこしくて、結局両側を探すしかない。ただし、探す範囲は mid > A[mid]ならば、左側はindexが0…

7. パターン数数え

問題 Given the mapping a = 1, b = 2, ... z = 26, and an encoded message, count the number of ways it can be decoded. You can assume that the messages are decodable. For example, '001' is not allowed. 考え方 stringが与えられた時のデコード方…

経路探索

問題 r行c列のグリッドに障害物がいくつかある。左上から右下にいく経路を探索する。ただし、動ける方向は右と下のみ。 考え方 グリッド (i,j)にたどり着けるかどうかをTrue or Falseで格納する。flg[i][j]は左側flg[i][j-1]と上側flg[i-1][j]を見れば到達で…

経路合計

問題 n段の階段を上がるときに、1ステップで1段、2段、3段のどれかであがれるときに考えられる上がり方の合計は? 考え方 n段目にはn-1段目から1段で、n−2段目からは2段、n-3段目には3段であがれる。 つまり、f(n) = f(n-1) + f(n-2) + f(n-3)である…

CUDA関連のページまとめ

毎回探して迷子になるのでまとめました。CUDA Toolkitのまとめです。 最新版 ダウンロードページ https://developer.nvidia.com/cuda-downloads 必要な条件 Installation Guide Linux :: CUDA Toolkit Documentation 現在のリリース一覧 https://developer.n…