サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
衆院選
minus9d.hatenablog.com
普通のインタラクティブシェルの場合 以下の2行を打ち込めばOKです。 >>> import readline >>> readline.write_history_file('history.py') ↑の例の場合、現在のディレクトリにhistory.pyという名前で保存されます。現在のディレクトリを知りたい場合は以下で調べましょう。 >>> import os >>> print(os.getcwd()) IPythonの場合 IPythonの場合は%saveコマンドが使えます。例えば In [(数字)]: %save 'history.py' 2-5 7 11 と書くと、自分の打った2, 3, 4, 5, 7, 11行目のコマンドがhistory.pyに保存されます。 コマンド履歴を確認したいときは以下のコマンドが使えます。 In [(数字)]: %history -n 参考 shel
Pythonのコードを改善するためのツールについて一通り試してみました。各ツールのインストール方法や使い方については Pythonのスタイルガイドとそれを守るための各種Lint・解析ツール5種まとめ! - Sider Blog に詳細にまとまっているのでおすすめです。 サンプルコード 以下のサンプルコードを対象に、各ツールの出力を確かめてみます。 import time import sys import fractions def func1(varA,varB): '''return sum of a and b''' varC = 42 return (varA + varB) print(func1(fractions.Fraction(1, 2), fractions.Fraction(1, 3))) 3 + 5 sys.exit(0) このスクリプトをsample.pyという名
Windows 10にてwindows subsystem for linuxを利用したUbuntu 16.04を立ち上げると、以下のようなエラーが出て起動に失敗しました。(エラーコードの部分は0x800703faです) Installing, this may take a few minutes... WslRegisterDistribution failed with error: 0xXXXXXXXX Error: 0xXXXXXXXX The parameter is incorrect. Press any key to continue... 心当たりがあるとすれば、前回の起動時にsudo apt-get update && sudo apt-get upgradeしたときに、途中でエラーが出て失敗したのでCtrl - Cでkillしたことです。 How to resolv
Pythonで並列処理・並行処理を提供する標準モジュールは数多くあり、初めてだと違いを理解するのは困難です。この記事では、それぞれの違いについて調べました。 threadモジュール(Python 2), _threadモジュール(Python 3) かつてPython 2にはthreadモジュールという複数のスレッドを扱うためのモジュールが存在していましたが、Python 3でdeprecated扱いになりました。一応_threadモジュールという名前で残っています。公式でも述べられているように、一般には、thread/_threadモジュールではなく、より高レベルなthreadingモジュールの使用が推奨されるようです。 threadingモジュール threadingモジュールは、先述の通り、複数のスレッドを扱うためのモジュールです。thread/_threadモジュールより高レベルと
Ubuntu 16.04にて、少し前からapt-getで新しいパッケージを入れようとすると「壊れた変更禁止パッケージがあります」エラーが出てインストールできない事象に悩まされていました。 $ sudo apt-get install libgfortran3 パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 インストールすることができないパッケージがありました。おそらく、あり得 ない状況を要求したか、(不安定版ディストリビューションを使用しているの であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移 動されていないことが考えられます。 以下の情報がこの問題を解決するために役立つかもしれません: 以下のパッケージには満たせない依存関係があります: libgfortran3 : 依存: gcc
C-x Return fして、ミニバッファでunix, mac, dosのいずれかを入力してreturn。 C-x C-sしてファイルを保存すると改行コードの変更が反映される。 参考 【教育用端末】 emacsでのファイル保存時の改行コードの変更の仕方 — 神戸大学情報基盤センター
よくどっちがどっちだったか混乱してしまうので自分用にまとめます。最初に、引数にオブジェクトを渡して呼び出したときの挙動を比較したのち、引数なしで呼び出したときの挙動を比較します。 vars(obj) 2. 組み込み関数 — Python 3.5.2 ドキュメントによると モジュール、クラス、インスタンス、あるいはそれ以外の dict 属性を持つオブジェクトの、 dict 属性を返します とあります。例で確かめてみます。 class MyClass: def __init__(self): self.val1 = 10 self.val2 = 20 obj = MyClass() print(vars(obj)) print(obj.__dict__) この出力は以下の通りです。vars(obj)は、objを辞書として扱ったときの値を返していると解釈できそうです。 {'val1': 10,
表題について自分なりにまとめています。経験値が足りないせいで誤ったことを書いているかもしれません。 C++のcv::Mat 例えば縦幅480, 横幅640のカラー画像を例にとって考えてみます。 cv::Mat img = cv::imread("board.jpg", CV_LOAD_IMAGE_COLOR); cv::Matではdimension(次元)数とchannel(チャンネル)数を区別して考えます。カラー画像の場合、次元数は縦・横の2、チャンネル数はB, G, Rの3になります。 // 次元数(画像なので縦・横の2次元) std::cout << "dims: " << img.dims << std::endl; // 2 // チャンネル数 std::cout << "channels: " << img.channels() << std::endl; // 3 B, G,
表題のことをPythonで行おうとあれこれ検索しましたが、なかなかこれだという方法が見つかっていません。 今のところ、Is there a way to know whether a Unicode string contains any Chinese/Japanese character in Python? - Stack Overflowで紹介されているunicodedata.name()という関数を使って、以下のような判定関数を書いて使っています。 def is_japanese(string): for ch in string: name = unicodedata.name(ch) if "CJK UNIFIED" in name \ or "HIRAGANA" in name \ or "KATAKANA" in name: return True return Fals
Python3を使って、Unicodeに登録された絵文字を羅列して遊んでみました。この記事ではPython 3でのみ動作確認をしています。 コードポイントから文字への変換 Pythonの組み込み関数であるchr()を使うと、Unicodeのコードポイント(日本語では符号点)から文字への変換ができます。 import unicodedata print(chr(97)) # 'a' print(chr(12354)) # 'あ' Unicodeのコードポイントは現時点でU+10FFFFまで存在するので、これを総当りするとすべての文字が羅列できます。 for i in range(0, 0x110000): ch = chr(i) カテゴリ別に文字を分類 標準ライブラリであるunicodedataを使うと、文字の名前やカテゴリーなどを取得できます。 import unicodedata pri
(2019-03-30追記) Windows の文字コードは Python では cp932 - criticablog によると shift_jisx0213 ではなく cp932 を使うべきだそうです。以下の記事は2015-07-30に投稿したものそのままです。 あるウェブページを、Python 3で以下のように読み込もうとしました。 import bs4 import urllib.request def get_soup(url): rawtext = urllib.request.urlopen(url).read() soup = bs4.BeautifulSoup(rawtext.decode('shift_jis')) get_soup('http://xxxxx') すると、decodeの部分で以下のような例外が発生しました。 UnicodeDecodeError: 's
以前、Pythonで最急勾配法を実装し、グラフを描く - minus9d's diary という記事にて、1変数関数に対して最急勾配法を用いて極値を求める実装を紹介しました。 今回の記事では、2変数関数に対して同じことをやってみます。目的関数はです。紙と鉛筆で極値を解析的に求めると、は、のときに極小となることが分かります。今回はこれを最急降下法で求めるのが目標です。 実装コード 少々長いですがコードを貼ります。Python34で動作確認しています。 #!/usr/bin/env python3 # -*- coding: utf-8 -*- # 参考:http://matplotlib.org/examples/mplot3d/surface3d_demo.html # http://stackoverflow.com/questions/7744697/how-to-show-two-f
本体のアップデート コンソールから conda update conda と打つ。 パッケージ一式のアップデート コンソールから conda update --all と打つ。アップデートされるパッケージの一覧が表示されるので、問題なければyと打ちReturn。 Pythonのバージョンのアップデート 3.4.2を3.4.3にアップデートする場合などは、 conda update python と打つ。3.4系から3.5系にアップデートする場合などは conda install python=3.5 と打つ。 参考 Anaconda FAQ — Continuum documentation python - Bulk package updates using Conda [Anaconda] - Stack Overflow Managing Python — Conda docume
Python3で、urllibとBeautifulSoupを使ってWebページを読み込む方法についてまとめます。 urllibを使ったページの取得 まず、Python3の標準ライブラリであるurllibを使ってページを取得します。Python2から書き方が変わっているので注意が必要です。 import urllib.request url = 'http://www.rekibun.or.jp/grutto/museum2015.html' response = urllib.request.urlopen(url) data = response.read() ここで、response.read()はbytesオブジェクトを返します。以下はその抜粋です。日本語がバイト列として表現されてしまっています。 b'<!DOCTYPE html> (中略) <title>\x8c\xf6\x89v
PythonスクリプトをWindowsのexeにする方法 (調査中) - minus9d's diary にて、Python 3.5のスクリプトをWindowsのexe化するにはPyInstallerが良さそうだという記事を書きました。この記事ではPyInstallerを使ってexe化する方法について調査した結果を記します。 スクリプトの用意 数式を微分するスクリプト differentiator.pyを用意します。 #!/usr/bin/env python3 # -*- coding: utf-8 -*- from sympy import symbols, diff from sympy.parsing.sympy_parser import parse_expr while True: x = symbols('x') math_expr = input('please input
C言語で、自作の構造体のメンバをユーザに開示しないテクニックとして、Opaqueポインタというものが知られています。今回は、書籍「C++のためのAPIデザイン」の3.1.6節を参考に、Opaqueポインタを使う簡単なサンプルを紹介します。 Opaqueポインタを使わない場合 人に関するデータを集めた構造体Personと、その構造体を使ったライブラリを作成することを考えます。以下にPerson.hのコードを示します。 #pragma once typedef struct _Person { int age; } Person; // 以下、Person構造体に関するAPI Person* createPerson(int age); // Person構造体のオブジェクトを生成 void printPerson(Person* ptr); // Person構造体を使った操作(メンバのプリ
Pythonパッケージ集として人気のあるAnacondaに付属するcondaコマンドを使って、クリーンなPython環境を作ったり破棄したりする方法についてまとめました。 環境を作る myenvという名前のpython環境を作ってみましょう。 $ conda create --name myenv python とすると、myenvという名前の環境が作成されます。以下、--nameの代わりに-nでもOKです。 Pythonのバージョンを指定したい場合はpython=x.xなどと書きます。 $ conda create --name myenv python=3.3 追加のパッケージを入れたい場合はパッケージ名を羅列します。 $ conda create --name myenv numpy scipy パッケージ全部入りのpython環境を作るには最後をanacondaにします。 $ co
pythonでcsvを読み込む方法についてまとめました。ライブラリによって微妙に読み込み方が異なるので大変です。 この記事では、以下のdata.csvを読み込む場合を考えます。最初の行がヘッダ行で、それ以降の行がデータ行です。 a,b,c 2,5.6,1 1,7.0,0 3,6.2,1 3,7.9,1 方法1: 標準ライブラリのcsvを使う方法 csv.readerオブジェクトを使って一行ずつ読んでいく方法です。ヘッダ行の部分を特別扱いする必要があります。 import csv def open_with_python_csv(filename): data = [] with open(filename, 'r') as filename: reader = csv.reader(filename) # ヘッダ行は特別扱い header = next(reader) # 中身 for r
最急勾配法(gradient method)は、ある目的関数の極値を求める方法の一つです。勾配がもっともきつい方向にを少しずつずらしていく方法です。極大値を求める場合は再急上昇法(gradient ascent method)、極小値を求める場合は最急降下法(gradient descent method)と言いわけます。 教科書「言語処理のための機械学習入門 (自然言語処理シリーズ) 」にのっとると、の更新式は以下のように書けます。 再急上昇法: 再急降下法: ここでは学習率(learning rate)といわれるパラメータで、適切な値に設定する必要があります。値が小さすぎると収束が遅くなり、値が大きすぎると発散の危険が増します。 今回はPythonにて、という一変数関数の極小値を最急降下法で求めてみます。 実装コード #!/usr/bin/env python3 # -*- codin
以下のような、インスタンス変数としてval1とval2を持つMyClassというクラスを考えます。 class MyClass: def __init__(self, val1, val2): self.val1 = val1 self.val2 = val2 以下のように、このクラスのインスタンスを作り、printしてみます。 mc = MyClass(10, 20) print(mc) すると以下のような文字列が表示されるだけで、インスタンスのもつインスタンス変数は表示できません。 <__main__.MyClass object at 0x00000000043E4A90> インスタンス変数を全部表示するには、vars()を使うとよいようです。 print(vars(mc)) とすると、 {'val1': 10, 'val2': 20} と、インスタンス変数が表示できました。 ただし
問題 pythonのmatplotlibで、年ごとの値の変化を表す折れ線グラフを書こうとして以下のコードを書きました。 import numpy as np import matplotlib.pyplot as plt x = np.array([2006, 2007, 2008]) y = np.array([35.2, 27.4, 41.2]) plt.plot(x, y) plt.show() すると、以下のような期待に反したグラフが表示されてしまいます。 期待に反しているのは以下の2点です。 横軸の値に小数が出現している 横軸の値からそれぞれオフセット分が引かれている +2.006e3, つまり2006がオフセットとなっています これを期待通りにするには以下の2種類の方法があるようです。 解決法1 - set_useOffset()とMaxNLocator()を使う方法 Matl
前にmatplotlibをオブジェクト指向スタイルで使う - minus9d's diaryという記事を書きました。しかし、matplotlib によるデータ可視化の方法 (1) - Qiita および Why do many examples use "fig, ax = plt.subplots()" in Matplotlib/pyplot/python - Stack Overflow によると、plt.subplots()という関数を使うと、より簡潔に書けるようです。この記事ではplt.subplots()の例を紹介します。 なお、以下のコード片では、全て冒頭に import matplotlib.pyplot as plt import numpy as np と書かれているものとします。 一つの図に一つのグラフの場合 まず、一つの図と一つのグラフ領域を持つ絵を、私が前の記事で
~/.emacs.d/init.elに以下を加えると、キーを打つたびにC++11の文法チェックが自動で走るようになります。 ;; 参考:http://d.hatena.ne.jp/suztomo/20080905/1220633281 (require 'flymake) (defun flymake-cc-init () (let* ((temp-file (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace)) (local-file (file-relative-name temp-file (file-name-directory buffer-file-name)))) (list "g++" (list "-std=c++11" "-Wall" "-Wextra" "-fsyntax-only" l
zshで過去のコマンド履歴を検索する機能(数文字タイプしてCtrl + R)を頻繁に使う人なら、自分の打ったコマンドにコメントを打って検索のキーワード代わりにしたいことがあるかもしれません。例えばこんな風に: ls -1 # print one entry per line しかし普通は以下のようなエラーが出て、行の実行に失敗します(履歴には残りますが)。 zsh: bad pattern: # コメント機能を有効にするには.zshrcに以下の1行を加えます。 setopt interactivecomments これでコマンドを実行しつつ、コメントを残すことができるようになります。 参考 Comments in command-line Zsh - Stack Overflow one entry per line
Python 2.xの知識もたいしてないのにもかかわらずPython 3.xのコードを書いていると、細かい違いでハマることが想像以上に多い。ここではそんなハマりどころをまとめておく。 printが文から式になった Python 2.xでは print "aaa"と書けたのに、Python 3.xでは print ("aaa")と、かっこで囲わなくてはいけなくなった。 xrangeの廃止 Python 2.xでは、巨大な数列のループを回すときは for i in xrange(0, 10000)とxrange()を使うのが定石だったが、Python 3.xではxrangeはrangeに統合されてなくなったので for i in range(0, 10000)と書くことになった。 参考:よりPythonicなPythonを目指して(後編):言語としての一貫性を重視したPython 3の進化 (
Matlabスタイルとオブジェクト指向スタイル matplotlibは、以下のようにmatplotlib.pyplotに属する関数を順番に呼んで使われることが多いです。 import matplotlib.pyplot as plt plt.plot([1,2,3,4]) plt.ylabel('some numbers') plt.show() これはMatlabでのグラフ描画の方法に近いので、Matlabスタイルと呼ぶことにします。 Matlabスタイルではmatplotlibが内部に状態を持ってしまいます。この性質は、インタラクティブな環境でコマンドを打ち込んでグラフを描画するときには都合がよいですが、逆にスクリプト作成時には混乱のもとになります。 スクリプト作成時には、Matlabスタイルではなくオブジェクト指向スタイルを採用するのがお勧めです。オブジェクト指向スタイルの書き方につ
Pythonの文字列は、作成後に変更することができない。 例えば、ある文字列strの3文字目を'z'に書き換えるつもりで以下のようなコードを書くと #!/bin/env python # -*- coding: utf-8 -*- str = "abcdefghi" str[2] = 'z' 以下のようなエラーが出て実行ができない。 Traceback (most recent call last): File "string.py", line 5, in <module> str[2] = 'z' TypeError: 'str' object does not support item assignment方法は2通り。 方法1: 文字列をいったんリストに変換する方法 文字列をばらしてリストを生成することで、文字を自由に編集できるようになる。編集し終われば、またリストから文字列に戻せ
10時0分を表すセルに、1時間30分だけ加えたいときにはTIME関数が使える。 上図のようにTIME関数を使う。1が1時間、30が30分、0が0秒という意味。 時間が計算されて、11時30分になった。 注意:B3セルに、=B2+2:00 と書いてもうまくいかない。TIME関数を使わないとだめ。
前に文献を読んでいて出会った、調べてもいまいち意味の分からなかった「閉形式」。言語処理のための機械学習入門 (自然言語処理シリーズ) を読み直すと、1.2節にあっさり書いてあった。以下、引用。 「加減乗除や初等関数の合成関数による解の表し方を、閉形式(closed-form)という。」 「微分形式でいう閉形式とは異なる。」 「ただし、初等関数としてどれだけの関数を含めるかは、明確に定められていないので、閉形式の定義は曖昧である。しかし、この曖昧さは実用上はほとんど問題にならない。」 これで終わりにしてもよいが、ついでに英語版のWikipediaも見ておく。(Closed-form expression - Wikipedia, the free encyclopedia)。Wikipediaによると、閉形式とは「有限個の、『よく知られた(well-known)』関数によって解析的に表される
次のページ
このページを最初にブックマークしてみませんか?
『minus9d's diary』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く