タグ

numpyに関するhiroyukimのブックマーク (11)

  • numpy使い方_2_スライスとブールインデックス - すこしふしぎ.

    前回に引き続きnumpy使い方を勉強していきます. 今回はndarrayからデータを取得する方法についてまとめていきます. インデクシング & スライシング ndarrayはpythonのlistの拡張として利用することができます. なので,listで使えるインデックス参照やスライシングは同じように使うことができます. # ndarray生成 In [1]: a = np.arange(10) In [2]: a Out[2]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) # インデクシング In [3]: a[5] Out[3]: 5 # スライシング In [4]: a[5:8] Out[4]: array([5, 6, 7]) # スライシングに対する代入(ブロードキャスト) In [5]: a[5:8] = 12 In [6]: a Out[6]:

    numpy使い方_2_スライスとブールインデックス - すこしふしぎ.
  • 数式をnumpyに落としこむコツ

    Tokyo.SciPy #2 にて発表した、数式(あるいは数式入りのアルゴリズム)から実装に落とす場合、何に気をつけるのか、どう考えればいいのか、というお話。 対象は、どうやって数式をプログラムすればいいかよくわからない人、ちょっとややこしい数式になると四苦八苦してしまい、コードに落とすのにすごく時間がかかってしまう人、など。 ここでは実行速度についてはひとまずおいといて、簡潔で間違いにくい、ちゃんと動くコードを書くことを目標にしています。 Read less

    数式をnumpyに落としこむコツ
  • Pythonのlistとnumpy.arrayとかの速度比較 - 唯物是真 @Scaled_Wurm

    導入 Pythonの数値計算ライブラリNumPyのarrayを使って、標準のlistを単純に置き換えてみると遅くなることが多いです。 実際どれぐらい速度に差があるのかlist, array, numpy.arrayで比較してみました。 処理時間の計測 Pythonに含まれるライブラリのtimeitを使います。 100000個の要素(すべてが1)を持つ配列の各要素の総和を1000回計算した時の処理時間を求めます。 forループの場合(イテレータでアクセスした場合)とsum関数、numpy.sum関数を使った場合について調べています。 ソースコードは一番下にあります。 使ったバージョンはPython 2.7.2, NumPy 1.6.2。 結果は以下のとおり(単位は秒)。 for sum numpy.sum list 3.17386984825 0.524603128433 9.5617320

    Pythonのlistとnumpy.arrayとかの速度比較 - 唯物是真 @Scaled_Wurm
  • NumPyのブロードキャストのメモ - 唯物是真 @Scaled_Wurm

    Pythonの行列演算ライブラリのNumPyはforループを使って計算すると遅いので、できるだけ行列演算やベクトル演算だけで計算を行いたい NumPyでは大きさの違うarray同士で計算するときのブロードキャストという仕組みがあります これを使うと複雑な計算が簡単なコードで計算できたりします 余談ですが、Rを使ったことがある人はベクトルの長さが足りない場合に定数倍で長さが合う場合は、定数倍にして長さを合わせて計算を行う的な処理があったのを覚えているかもしれません ブロードキャストはそれに似たような処理で、NumPyの場合は各次元の大きさが等しいか、あるいは片方の大きさが1の場合に計算ができます(次元数が少ない場合には先頭から大きさ1として次元を拡張する) 大きさが1の場合にどのようになるかというと、相手の大きさに合わせてコピーして拡大したものと計算したときの結果が得られます 以下の例だとベ

    NumPyのブロードキャストのメモ - 唯物是真 @Scaled_Wurm
  • pandas + matplotlib による多彩なデータプロッティング - Qiita

    科学技術計算用言語としての Python そもそもなぜデータ分析などの科学技術計算を Python でやるのでしょうか。主に次の二点によります。 NumPy, pandas, matplotlib など豊富なライブラリが揃っている 汎用性の高いグルー言語として利用できる データフレームを利用した計算とそのグラフ描画 (プロッティング) のみであれば R のほうがどちらかといえば簡単かもしれません。しかし統計解析を汎用性の高い Python で完結させることで様々な分野へのより幅広い応用が可能になります。 NumPy 統計解析の多くはベクトル演算を伴います。 NumPy は高速でメモリ効率の良い多次元配列の実装である ndarray を備えています。プログラミング言語に元から備わっている配列・ハッシュオブジェクトでは到底かなわないような高次元のベクトル演算を可能にします。またファンシーインデ

    pandas + matplotlib による多彩なデータプロッティング - Qiita
  • Pythonで数値計算のコツ:for文書いたら負けかなと思っている – はむかず!

    転職してから1年とちょっとが経ち、Pythonをメイン言語としてからも同じくらいが経った。最近やっとnumpy/scipyの使い方のコツがわかってきたと思うので、マサカリ飛んでくるのを覚悟でなんか書いてみようと思う。 転職して初めてPythonを使ったというわけではない(実際wafのwscriptとかは書いたことある)が、まあでもほぼ初心者同然だった。学習曲線でいうとPythonはすごく良い言語だと思う。Python体の言語仕様については、わりとすぐに覚えることができた。だが一方、numpy/scipyについては、そう簡単ではなく習得するにはそれなりに時間がかかったと思う。 ケーススタディ たとえば\(N\times M\)行列\(B\), \( M\times L \)行列\( C \), \( M \)次元ベクトル\(a=(a_k)_{1\leq k \leq M}\)が与えられて

  • Numpyのブロードキャスティングについて – はむかず!

    先日ありがたいマサカリを頂いたのを機に、numpyのブロードキャスティングについてあまり理解してなかったなと思い、改めてまとめてみることにする。以下自分の理解をまとめたものだが、一応初心者向け解説のつもり。わかってる人は読まなくていい。 解説 Numpyでは例えば、以下のように1次元配列とスカラー値の演算ができる。 >>> from numpy import * >>> a=arange(5) >>> a array([0, 1, 2, 3, 4]) >>> a*5 array([ 0, 5, 10, 15, 20]) こういうのをブロードキャスティングと呼ぶ。 これは、2次元と1次元の計算に限らず、また掛け算に限らず他の四則演算でも似たようなことができる。なので、以下足し算に限定して例示する。例えばこの場合。 >>> a=arange(10,130,10).reshape(4,3) >>

  • Pythonの数値計算ライブラリ NumPy入門

    Scientific Computing Tools For Python — Numpy NumPy は Pythonプログラミング言語の拡張モジュールであり、大規模な多次元配列や行列のサポート、これらを操作するための大規模な高水準の数学関数ライブラリを提供する。(via Wikipedia) これまで知識があいまいだったNumPyについて、もう一度おさらいしたいと思います。NumPyはSciPyと併せて科学技術計算でよく利用されています。また、高速に行列演算ができるのでOpenCV(コンピュータビジョンライブラリ)でもNumPyを利用したPythonインタフェースが提供されるようになりました。 OpenCVPythonバインディングについては去年のエントリーでも取り上げていますので参考までに。 * さくらVPSOpenCVをインストールしてPythonから使う [2017/04/2

  • Pythonを使用したデータ解析入門01 - Λlisue's blog

    どうも、ブログのサブタイトル通り更新をサボっていた有末です。 僕は生物学を専攻している関係上Pythonは主に研究データの解析に使用しています。記事では懐石に関して今まで試行錯誤して得てきたノウハウを共有したいと思います。主に生データのグラフ化について書いていきます。タイトルに01とかつけてますが徒然なるままに更新されないブログなので次回作にはあまり期待しないでください。 前提 記事では以下の条件を前提としています。例の通りWindowsは対象外ですのでGoogle先生に聞くなどして各種必要ライブラリのインストールなどを行なってください。なお下記で使用しているpipはWindowsに対応していなかったと思うので代わりにeasy_installを使用することになると思います。 OS: Debian Wheezy 64bit Python: Python 2.7 必要ライブラリ pip -

    Pythonを使用したデータ解析入門01 - Λlisue's blog
  • HaskellのFusionがあれば速度と抽象化を両立できる - りんごがでている

    データの分析をする際には配列やベクトルは欠かせないデータ構造です。 大体どの言語にも大体配列は用意されていて、そこにサンプルのデータ等を入れて統計量を計算したり関数に渡して回帰をしたりするわけです。 ベクトルという単位でデータの塊を扱うものの、実際のアルゴリズムではベクトル内の要素一つひとつを見ていって何か処理をしたり計算をすることが多いでしょう。 その際、命令型言語ではforループを陽に使って要素にアクセスすることになります。 簡単な例を見てみましょう。ベクトルv1とv2の内積を求める関数をC言語で書くと以下のようになります。 function dot(double* v1, double* v2, size_t n) { double s = 0.0; for (int i = 0; i < n; i++) { s += v1[i] * v2[i]; } return s; } 特に難

    HaskellのFusionがあれば速度と抽象化を両立できる - りんごがでている
  • Install Python, NumPy, SciPy, and matplotlib on Mac OS X

    Install Python, NumPy, SciPy, and matplotlib on Mac OS X
  • 1