isatoの活動日記

管理人isatoが毎日の生活で気になったこと、勉強になったことを書いています。

ウラムの螺旋の三次元拡張

YouTubeに公開しています。

 

ウラムの螺旋を三次元拡張してみた

https://youtu.be/ompnziJsbcM

 

通常版のウラムの螺旋では、正方形から次に大きい正方形を作るように軌跡を描いていきました。

この考えを拡張して、立方体から次に大きい立方体を作るように軌跡を描けば三次元拡張ができると考えました。

 

可視化にはplotlyというライブラリを用いました。

 

二次元版では直線が二次関数になっていました。じゃあ三次元版の直線は三次関数になってほしいですね。

 

動画の最後で確かめています。

 

三乗数しか調べていませんが、三次関数が直線で現れていることが確かめられました。

 

一方で気になる素数の分布は今のところよく分からないです...。

 

何かわかった方はぜひコメントください!

 

 

vim ある行で任意の文字に飛ぶ

vimでのカーソル移動は慣れないと使いづらいですよね。上下左右が k j h lに対応してますが、これはバンバン使って慣れていくしかないでしょう。

 

で、今回はある行で任意の文字に飛びたいときに使うコマンド f についてです。

 

例えば以下の文で、カーソルが下線部にあるとき

I like vim.

 

コマンドモードで、fvと打つと、

I like vim.

 

のようにvまで移動します。

 

これが意外と便利です。

ちなみに、小文字のfで右側の文字を探索、大文字のFで左側を探索できます。

 

バンバン使っていきましょう!

python 辞書型とタプル型を用いた2次元データ

タイトルを見られた方は、なんでそんなややこしいことするの?って思われたかもしれません。確かに用途によっては、他の作り方でも十分です。

 

タイトルのようにするメリットは、領域が確保されていないときでも要素を指定できることです。

 

詳しく説明します。

C言語とかだと最初に int list[10][10] のように領域を確保してから、list[2][5] = 7 のように要素にアクセスします。

 

しかしpythonは領域を動的に確保するので、このようには書けません。(numpyとかではできます)

 

では領域を動的に確保しながら要素を指定したいときはどうすればいいでしょう。

 

一つの答えとして以下のようにすれば良いです。(2, 5)という要素に7を格納したい場合は

 

data = {}

data[(2,5)] = 7

 

のようにします。

 

タプル(2,5)が整数7と紐づけられるため、2次元データとして扱うことが可能です。

 

numpy使えばよくね?って思われた方もいらっしゃると思います。

 

numpyは基本的には数値を格納して計算に使うものです。それに比べて、このやり方では要素は数値以外でも問題ありません。リストを格納してもいいし、辞書を格納してもいいわけです。また動的確保なので、無駄な領域を確保する必要がないという利点もあります。

 

そう言った意味では結構汎用性は高いと思っています。

 

もっといい方法があれば、ぜひ教えてください!

 

python import (上階層にモジュールがあるとき)

pythonのimportの使い方の続きです。

 

読み込みたいモジュールがメインファイルより上の階層にある場合の読み込み方についてまとめます。

例では以下のようなファイルの配置にします。

 

module.py

file(ディレクトリ)

 ーmain.py

 

main.pyでmodule.pyを呼び出すには以下のようにします。

 

import sys

sys.path.append('../file/')

import module

 

使うとき:module.関数名等~

 

少し系統が違うので記事を分けました。

ぜひ覚えておくと、ふとした時に役立つと思いますよ!

 

 

pythonのimportの書き方

pythonでの外部ファイルの読み込みについてまとめます。オブジェクト指向の醍醐味ですね。

 

・同階層

同じディレクトリ内に

module.py

main.py

があるとき、main.py内で以下のように書けばmodule.pyを読み込むことができます。

 

import module

使うとき : module.関数名等

 

または

 

from module import 関数名等

使うとき : 関数名等

 

関数名等としているのはクラス名でもいいからです。深い意味はありません。

 

 

・モジュールが下の階層

上の例のmodule.pyが、main.pyと同じ階層にあるfileというディレクトリにある場合

 

import file.module

使うとき : file.module.関数名等

 

のように書きます。

file.moduleが長いなと思ったら以下のように書き換えます。

 

import file.module as name

使うとき : name.関数名等

 

同階層の場合のfromを使うことも可能です。

 

 

 

上の階層にある場合は次の機会に書きますね^ ^

 

ウラムの螺旋について

f:id:spark856:20190702183358p:image

 

この図をウラムの螺旋と言います。

 

ウラムという数学者が退屈な会議中に、数字を書いて遊んでいたところ偶然発見されたそうです。

 

ウラムの螺旋の書き方

 

f:id:spark856:20190702183624p:image

 

このように1を真ん中にして螺旋を描いていきます。そして、素数に色をつけると最初の画像のようになります。

 

明らかに直線ができており、規則性があるように見えます。不思議です。

 

実はウラムの螺旋に直線を引くと、その直線上の数は二次関数で表現できます。(個人的にはこの事実も同じくらい驚き)

 

そしてなんと、ウラムの螺旋にはオイラー素数生成多項式が含まれています!めちゃくちゃ面白いですね^ ^

 

オイラーさんも、もしかしたらこうやって見つけたのかも....

 

暇つぶしもバカにできないですね笑

 

 

pythonのファイル出力いろいろ

pythonのファイル出力のやり方は一通りではありません。

今回は使いやすい2パターンのやり方についてまとめます。

 

パターン1 withを使う。

 

with open(‘ファイル名',’w’) as f:

      f.write(‘書き込む文字列’)

 

この書き方では、wをrにすることでファイル入力も可能です。

 

パターン2 printの出力先をファイルにする。

 

print(‘書き込む文字列’,open=(‘ファイル名',’w’))

 

この書き方は、書き込み専用だと思われます。でも一行で書けていい感じですね!

 

意外と書こうと思ったら忘れてるのでまとめておきました^ ^