とある掲示板に行列の問題に関する質問があったのだが

0

    問題は端折るが、この行列計算は間違っているのか、という質問で、4×4行列を掛け算すればいいだけの話だ。これを手でやるのも面倒なので、numpy を使って計算してやった。

    >>> import numpy as np
    >>> i = np.array([[0,-1,0,0],[1,0,0,0],[0,0,0,1],[0,0,-1,0]])
    >>> i
    array([[ 0, -1, 0, 0],
    [ 1, 0, 0, 0],
    [ 0, 0, 0, 1],
    [ 0, 0, -1, 0]])
    >>> j = np.array([[0,0,-1,0],[0,0,0,-1],[1,0,0,0],[0,1,0,0]])
    >>> j
    array([[ 0, 0, -1, 0],
    [ 0, 0, 0, -1],
    [ 1, 0, 0, 0],
    [ 0, 1, 0, 0]])
    >>> k = np.array([[0,0,0,1],[0,0,-1,0],[0,1,0,0],[-1,0,0,0]])
    >>> k
    array([[ 0, 0, 0, 1],
    [ 0, 0, -1, 0],
    [ 0, 1, 0, 0],
    [-1, 0, 0, 0]])
    
    >>> (np.dot(i, j) == k).all()
    True
    >>> (-np.dot(j, i) == k).all()
    True
    >>> (np.dot(j, k) == i).all()
    True
    >>> (-np.dot(k,j) == i).all()
    True
    >>> (np.dot(k,i) == j).all()
    True
    >>> (-np.dot(i,k) == j).all()
    True
    

    ちょっと気になったのは、こんな回答で果たして質問した人が納得してくれるかどうかである。蛇足しておくと、np.dot() は配列を行列として積を求める関数で、all() は全て True であるときに True とする関数。all() を付けないと、各要素毎に比較して True かどうかを表示する。それでも別に構わないのだが、掲示板には文字数制限があるので、なるべく文字数を節約するということで。

    JUGEMテーマ:python


    久しぶりに書評を投稿するスクリプトを実行してみたのだが

    0

      スクリプトといっても大したものではなくて、HTML タグとかをちょろっと付けるだけのものである。 ちょろっとでも手で付けるのは大変なので、markdown 的な処理を再生産するのもどうかと思ったのだが、とりあえずちょろっと書いてしまったプログラムがあるのでそれを使っている。

      ところが、そのスクリプトが作るファイルが一体どこにあるのか分からなくなった。つまり、原稿となるファイルをそのスクリプトにかけると、どこかに temp というファイルができるのだが、どこだか分からない(笑)。

      プログラムを解析して解決。

      JUGEMテーマ:python


      python に range という関数があるのだが

      0

        最近話題にしていた、ファイルを日別に分ける処理を書く時に、例えば 31 日まである月だと range(1,32) と書くわけである。これで1から31までの値を生成してくれる。32は含まない。half-open という概念はよく分かるのだが、直感的に1から31まで順に作りたいときに、(1,32) というのはちょっと違和感がある。

        in_range のような名前で両端を含むような関数を作ればいい、という意見もあるかもしれないが、個人的にはそこまで拘っていないので、31日まで処理するときは range(1, 31+1) と書いている。これはこれで拘り過ぎのような気がしないでもないが。

        JUGEMテーマ:python


        django をインストールしようとしたのだが

        0
          conda create -n django
          

          を実行したら、

          WARNING: A newer version of conda exists.
          

          とか言われた。4.6.8 が出たらしい。

          conda update -n base -c defaults conda
          

          して、という指示だったのでその通りやって解決。

          JUGEMテーマ:python


          Jupyter Notebook でマークダウンのテキストを書いているのだが (2)

          0

            先日書いた、ドル記号 ($) で画面表示がおかしくなる件。 結局解決してないのだが、消極的対応をするようになったので、追記しておく。つまり、どうしても何とかしたい場合は、

            <!--- $ -->

            のような行を適当なところに追加してしまうのだ。一度 $ が出現してから、その行まではダメだが、その後は状態がリセットされる。 コメント行になっているので、Run させたときに画面に出てこないのがミソ。コメント開始で「--」ではなく「---」とするのは何か理由があったはずだが忘れた(笑)。

            JUGEMテーマ:python


            Jupyter Notebook でマークダウンのテキストを書いているのだが

            0

              Cell type を markdown と指定すると、編集中の画面である程度リアルタイムに状態を反映して色や文字サイズで表現してくれるのでとても便利なのだが、途中にドル記号「$」が出てくると、その後うまく状態表示してくれないことがある。次に「$」が出てきた後は普通に表示されたりする。

              いろいろ調べてみたが、エスケープする程度では全く改善されなかった。

              ただ、これは編集中の画面だけの話で、生成したデータはちゃんと思惑通り修飾されているので、いまいち解決意欲がわかないのである。

              JUGEMテーマ:python


              Python のバージョンアップがあったのだが

              0

                12月24日に、Python 3.7.2 と 3.6.8 がリリースされた。私が使っているのはなぜか 3.6.4 と少し古い。古いまま使う理由はないので、年末年始に update しようと思っている。

                JUGEMテーマ:日記・一般


                You are using pip version 9.0.1, however version 18.1 is available.

                0

                  ちょっとバージョン空きすぎてない? という疑問を感じたのは確かだが…とりあえずサクっとバージョンを上げた。 コマンドは画面に表示されていた通りで問題なかった。

                  JUGEMテーマ:日記・一般


                  45問の四択のテストで適当に選んで30問以上正解する確率は

                  0

                    計算したら約 0.000000475% になった、多分合っていると思うのだけど、これがうまくプログラムで書けない。

                    import scipy.misc as scm
                    import numpy as np
                    
                    p = 0
                    n = 45
                    for i in range(30, n + 1):
                        p += scm.comb(n, i, 1) * np.power(1/4, i) * np.power(3/4, n - i)
                    
                    print(p)
                    
                    4.75006548988e-09
                    

                    numpy 使うのだから、ループさせないで一撃で計算できそうな気がするけど、vectorize とか使って定義した関数を要素毎に呼び出して sum 取ったりしているとあまり見た目は変わらない(笑)。もうちょっと真面目に numpy 勉強しないとダメっぽい。

                    JUGEMテーマ:日記・一般


                    「いつか読んだ本」に1日2投稿したのだが

                    0

                      原稿のテキストを書いて、投稿するときにタグを突っ込んだりするのが面倒なので Python で原稿に HTML のタグをちょっとだけ突っ込む処理を作って、それを確認するために書いてたら2つ原稿ができたので投稿したのである。

                      大したコードじゃないので全部出してみる。

                      import codecs
                      
                      filename = 'D:/tmp/books.tmp'
                      
                      f = codecs.open(filename, 'r', 'utf8')
                      in_p = False
                      in_quote = False
                      
                      def start_p():
                          global in_p
                          if in_p == False:
                              in_p = True
                              print("<p>")
                      
                      def end_p():
                          global in_p
                          if in_p:
                              in_p = False
                              print("</p>")
                              
                      def start_quote():
                          global in_quote
                          if in_quote == False:
                              in_quote = True
                              print("<blockquote>")
                          else:
                              print("<br />")     
                      
                      def end_quote():
                          global in_quote
                          if in_quote:
                              in_quote = False
                              print("</blockquote>")
                      
                      for line in f:
                          if len(line) < 3:
                              end_p()
                              end_quote()
                              continue
                      
                          if line.startswith('>'):
                              end_p()
                              start_quote()
                              print(line[1:].rstrip())
                              
                          else:
                              end_quote()
                              start_p()            
                              print(line.rstrip())
                                      
                      f.close
                      

                      直指定の /tmp/books.tmp を開いて、「>」が付いているところを blockquote で囲む、そうでないのは空白で区切って p で囲む、その程度の処理しかしてない。

                      これで気になってるのが、rstrip して print しているところ。 rstrip は空白含めて改行を削除している。そして print で改行を付けて表示する。 だったら何もしないで改行を追加しない出力関数を使えばいいような気がしたのだが、このあたり、Python 慣れしてないのでどんな書き方がエレガントなのかいまいち把握できていない。 まあ行末の空白もカットできているからいいか、程度の感じで書いている。

                      JUGEMテーマ:python


                      | 1/1PAGES |

                      PR

                      calendar

                      S M T W T F S
                           12
                      3456789
                      10111213141516
                      17181920212223
                      24252627282930
                      31      
                      << March 2024 >>

                      selected entries

                      categories

                      archives

                      recent comment

                      recent trackback

                      links

                      profile

                      search this site.

                      others

                      mobile

                      qrcode

                      powered

                      無料ブログ作成サービス JUGEM