タグ

numericalに関するtakuya-aのブックマーク (10)

  • Number Parsing at a Gigabyte per Second – Daniel Lemire's blog

  • ECMAScriptの浮動小数点数の丸め仕様がスゴい - hnwの日記

    ECMAScriptの浮動小数点数の丸め関数である Number.prototype.toFixed() について調べてみたところ、浮動小数点数をわかっている人が作った硬派な仕様だと感じたので、解説してみます。 浮動小数点数の丸めの善し悪しについて 私はプログラミング言語の浮動小数点数の丸め処理に興味があり、過去に関連記事を30以上書いています。こうした活動から得られた知見として、良い丸め関数には次のような性質があると考えています。 仕様がシンプルで直感的であること 仕様が抜け漏れなく文書化されていること バグを作り込みにくい仕様であること どれも良い関数の一般論のような話ですが、丸め処理に限って言えば簡単な話ではありません。そもそも浮動小数点数の性質が人の直感に反するため利用者にとっても実装者にとっても罠が多く、結果として上の条件を満たせないことが多いのです(私が面白いと感じるポイント

    ECMAScriptの浮動小数点数の丸め仕様がスゴい - hnwの日記
  • NumPy・SciPyを用いた数値計算の高速化 : 応用その2 - Qiita

    対象 Python及びNumPy初心者に向けて書いています. 「C言語は使えるけど最近Pythonを始めた」とか「Pythonらしい書き方がよくわからない」に該当する物理系の数値計算を目的とした方には特に有用かもしれません. また, 自分の不勉強のために間違った記述があるかもしれません. ご容赦ください. あらまし NumPyを用いた数値計算の高速化 : 基礎 NumPy・SciPyを用いた数値計算の高速化 : 応用その1 の続きになります. 基礎的な数値計算の手法を追っていきますが, 今回は少し発展的な内容も含みます. 代数方程式 / 超越方程式 代数方程式はいわゆる手で解けるふつうの方程式です. 超越方程式は随分大仰な名前ですが, 代数的な手法で解けない方程式のことを指します. 具体的には $$ \sin(x) = \frac{x}{2} $$ こんな子です. この方程式は, 「$\s

    NumPy・SciPyを用いた数値計算の高速化 : 応用その2 - Qiita
  • NumPy・SciPyによる高速化の実力を見る - Qiita

    あらまし 以前の記事でNumPy・SciPyの高速化にまつわる事柄を書きました: NumPyを用いた数値計算の高速化 : 基礎 NumPy・SciPyを用いた数値計算の高速化 : 応用その1 NumPy・SciPyを用いた数値計算の高速化 : 応用その2 ホントに早くなってるの?ちゃんと調べてみましょう. 調査方法 Pythonによるオレオレ実装と比較します. 速度よりシンプルさを重視した実装との比較なので正当な評価とは言い難いかもしれません. Pythonはanaconda3, 時間計測にはIPythonの%timeitを使用します. --実行環境-- OS : Ubuntu16.04 LTS 64bit Python : anaconda3-4.1.1 CPU : Intel Corei5 3550 (4-core / 4-thread) リストの初期化 たとえば行列の初期化です.

    NumPy・SciPyによる高速化の実力を見る - Qiita
  • 100万倍速いプログラムを書く - Qiita

    この記事はなんなの プログラミングを始めたばかりで高速化の大枠が全くわからず意味不明なことをしていた在学時、こんな資料があったら良かったのになあ、と思って書いたもの。 書いて、在学時研究室に押し付けた後紛失したと思われていたものが発掘されたもの。 要約 ライブラリがあるならそれを使う。 ライブラリが無ければ、ボトルネック部分を探してそこだけ高速な言語で書きなおすか、可能なら事前コンパイルする。 最初から全てを Low-Level な言語で書くと大変、でも結果のプログラムは速い。 以下の時間の計測ではインポートにかかる時間は除いています。 使用するもの Python(3系) Numba Scipy Line Profiler Fortran(gfortran) QUADPACK QUADPACK以外の導入方法の説明は色んな所にあるので各自でお願いします。上3つに関しては、個人的にはAnaco

    100万倍速いプログラムを書く - Qiita
  • 逆行列補題とBFGSへの応用 - Qiita

    逆行列補題について まずブロック行列とその逆行列から話を始めよう。 $I_{n},I_{m},P,Q,R,S$をそれぞれ以下の条件を満たす行列とする。 $・I_{n}:n×n単位行列$ , $I_{m}:m×m単位行列$ $・P:n×n行列$ , $Q:n×m行列$ , $R:m×m行列$ , $S:m×n行列$ $・P,Rはそれぞれ逆行列を持つ$ $・P+QRS$ $及び$ $R^{-1}+SP^{-1}Q$ はそれぞれ逆行列を持つ その上で以下のブロック行列を考えよう。 \begin{align} \begin{pmatrix} P & -Q \\ S & R^{-1} \end{pmatrix} &=\begin{pmatrix} I_{n} & -QR \\ 0 & I_{m} \end{pmatrix} \begin{pmatrix} P+QRS & 0 \\ 0 &R^{-1}

    逆行列補題とBFGSへの応用 - Qiita
  • 2.2. Numpy の先進的な機能 — Scipy lecture notes

    2.2. Numpy の先進的な機能¶ 著者: Pauli Virtanen Numpy は Python による科学技術計算ツールスタックの基で、メモリブロック内のたくさんの要素の効率的な操作を実装するために利用されます。その詳細を知ることで、柔軟性を活かして効率的に利用し、便利に近道することができます。 この節で扱う内容: Numpy 配列の詳細とその成果物、Tips や工夫。 ユニバーサル関数: どんなもので、なぜあるのか、そして新しく欲しくなったときにどうすればいいか。 他のツールとの統合: Numpy はいくつかの方法で ndarray の中の任意のデータを不要なコピーなしに、ラップすることができます。 最近追加された機能とそれが何をもたらすか: PEP 3118 buffers, generalised ufuncs, ...

    takuya-a
    takuya-a 2018/08/17
    ndarrayの内部構造だいたいわかった
  • Pythonでの数値計算ライブラリNumPy徹底入門

    NumPyは、多次元配列を扱う数値演算ライブラリです。機械学習だけでなく画像処理、音声処理などコンピュータサイエンスをするならNumPyを学んでおくことで、あなたの日々の研究や開発の基礎力は格段にアップするはずです。 プログラミングの初心者から、Webエンジニア、これから研究する人など、初学者にも分かりやすく優しく説明することを心がけて必要な知識が身につくように解説しています。 腰を据えて学習する時間と余裕のある方は、Step1から順に進めていくことで、苦手意識のあった方でも一通り読み終わる頃には理解できなかったPythonとNumPyのソースコードがスラスラと読めるようになるはずです。 上級者の方は、分からない記事だけ読むだけでも、力になると思われます。あなたのプログラミング能力を向上する手助けになることをお約束します。このサイトを通して、コンピュータサイエンスに入門しましょう。 Ste

    Pythonでの数値計算ライブラリNumPy徹底入門
  • 精度保証付き数値計算(その1) - kivantium活動日記

    コンピュータ上で実数を表現する際には浮動小数点数を使うのですが、浮動小数点数の計算では誤差が発生します。 簡単な例を見てみます。 #include <cstdio> int main(void) { float a = 0.0; for(int i=0; i<10000; ++i) a += 0.01; printf("%.10f\n", a); } という0.01を10000回足すプログラムを実行すると結果は100.0029525757となり、期待される100.000000000に比べて0.003ほどの誤差が発生しています。 浮動小数点数計算での誤差を抑える一番簡単な方法はfloatではなくdoubleなどのより精度の高い型を使って計算精度を上げることですが、どうしても限界はあります。 他にも問題ごとにテクニックは存在しますが、誤差を完全に無くすことはできません。 正確な計算のためには誤

    精度保証付き数値計算(その1) - kivantium活動日記
  • 二重数で自動微分する - Qiita

    と記述する数である。ここで、$\epsilon$ が複素数の $i$ にあたるもので、$\epsilon^2 = 0$ という性質を持つものとして定義されている。 加減乗除も複素数と同様に定義されて、C++ で実装すると、 #pragma once #include <ostream> namespace math { // 二重数 a + b ε template <typename T = double> class dual_number { public: using this_type = dual_number<T>; public: dual_number(T a, T b = T(0)) : a_(a), b_(b) {} this_type operator - () const { return this_type(-a_, -b_); } this_type& ope

    二重数で自動微分する - Qiita
  • 1