算額あれこれ

算額問題をコンピュータで解きます

2020-01-01から1年間の記事一覧

Julia で,一元配置分散分析

一元配置分散分析 なじみのない用語かも知れないが,「独立 k 標本の平均値の差の検定」である。 残念なことに,Juliaでは標準的に用意されておらず,GitHab には何例かあるものの,全ての人が簡単にアクセスできるものではないかもしれないので,あえてプロ…

Julia の F 分布関数

1. Julia の F 分布関数 Rmath パッケージを使用すれば,R の pf(), qf() が使える。第 4 引数は lower.tail に対応し,true (デフォルト)のとき lower.tail=TRUE,false のとき lower.tail=FALSE を意味する。 using Distributions, Rmath 1.1. オブジェ…

Julia の t 分布関数

1. Julia の t 分布関数 Rmath パッケージを使用すれば,R の pt(), qt() が使える。第 3 引数は lower.tail に対応し,true (デフォルト)のとき lower.tail=TRUE,false のとき lower.tail=FALSE を意味する。 using Distributions, Rmath 1.1. オブジェ…

Julia のカイ二乗分布関数

1. Julia のカイ二乗分布関数 Rmath パッケージを使用すれば,R の pchisqt(), qchisq() が使える。第 2 引数は lower.tail に対応し,true (デフォルト)のとき lower.tail=TRUE,false のとき lower.tail=FALSE を意味する。 using Distributions, Rmath …

Julia で統計学分布関数と仮説検定

(@v1.5) pkg> add Distributions, Random, HypothesisTestsjulia> using Distributions, Random, HypothesisTests 分布関数 標準正規分布において,R の rnorm, pnorm, qnorm, dnorm に相当するもの Julia の場合は,「オブジェクト」を操作する。 まず,標…

Julia でデータフレームを操作する

Julia で CSV ファイルを読む。あるいは,データフレームを使う。 まずは,CSV と DataFrames パッケージのインストール。 (@v1.5) pkg> add CSV, DataFrames Updating registry at `~/.julia/registries/General`#########################################…

Julia のベンチマークテスト

Julia のベンチマークテスト:@times と BenchmarkTools の @benchmark まだ BenchmarkTools をインストールしていないなら,まずはパッケージのインストール。 (@v1.5) pkg> add BenchmarkTools Updating registry at `~/.julia/registries/General`#######…

素数判定プログラム -- 3

さて,下請け関数をコンパイラ言語で書いたらどうなるかということで,私が一番とっつきやすい FORTRAN(雀百まで踊り忘れず)を使って,以下のようなプログラムを書いた。 function is_prime(x) implicit none integer(8) mx, x, i logical is_prime if (x …

素数判定プログラム -- 2

さて,前の記事で Python による素数判定プログラムを評価したが,今回は Python プログラムを Julia に移植した結果を書く。 まず,2 を特別にして,あとは奇数で試し割りをするプログラムである。 Julia は色々な変数タイプが使えるが,符号付き 64 ビット…

素数判定プログラム -- 1

原作者が最初に書いた関数。本人も認めるとおり,速度的には超マズイ。 def is_prime000(x: int) -> bool: if x <= 1: return False for i in range(2, x): if x % i == 0: return False return True 試し割りはその数の平方根までで十分。そこまでの数で割…

次の 13 日の金曜日はいつか?

ツェラーの公式を利用して列挙する def Zeller(y, m, d): w = ['Sat', 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri'] if m == 1 or m ==2: m += 12 y -= 1 C = y // 100 Y = y % 100 return w[(d + 26*(m+1)//10 + Y + Y//4 -2*C + C // 4) % 7] for y in rang…

pandas version 1.0.0 (Python)

データフレームのマークダウン出力ができるようになった >>> pd.__version__'1.0.1'>>> df = pd.DataFrame({"a": list("abcde"), "b": [1,2,3,4,5]})>>> df a b0 a 11 b 22 c 33 d 44 e 5>>> df.to_markdown()'| | a | b |\n|---:|:----|----:|\n| 0 | a | 1…

Python なんかやめて Julia にしよう!!!!!

macOS Big SurでPythonをはじめてみる という記事があったのだけど Pythonのバージョン2系とバージョン3系の解説があること バージョン3へのアップグレードについて記述があること プログラム経験はあるけど、Pythonは初心者という人向けであること とはいっ…

groupby で,自作の関数を適用する(Python)

df2 = df.groupby(群) df2.agg(自作関数の名前)

素数列挙プログラムのスピードアップ

以下のようなプログラムがあった。 このプログラムだと,10**8 以下の素数を探索するのに 18 日くらいかかる。 import time primes_list = upper_lim = 10**3start_time = time.time() for integer in range(2, upper_lim + 1, 1): if len(primes_list) < 1 …

Julia のプログラムを書いてみよう -- 1

The Julia Language を読み進めているが,1300ページもあるので,モチベーションを維持するために,実際にプログラムも書いてみなくては。 julia> #= 他の言語と違うところに注目してまとめてみよう。 複数行の注釈は #= ... =# 形式としては Java などの /*…

整数除算の商と剰余

整数同士の割り算の,商と剰余についてまとめておく。 私が今まで使ったことのある言語についてのみであるが。Prorog とか Pascal とか PL/I とかそのほかにもあるが,今となっては実行環境がないので,確かめることができない。 結果を先に述べておく。 2 …

Python だからって...,numpy も使えば?

文字列中に,どのような文字が幾つあったか知りたいって... >>> import numpy as np>>> str = 'あいうえおあおaiueoao999112'>>> index, count = np.unique(list(str), return_counts=True)>>> indexarray(['1', '2', '9', 'a', 'e', 'i', 'o', 'u', 'あ', '…

Julia -- 10-7(配列)

組み合わせ b の逆順列を作る invperm(v) julia> v = [2; 4; 3; 1]; 一番小さいものが何番目,二番目に小さいものが何番目,... というリストをつくる。 julia> invperm(v)4-element Array{Int64,1}: 4 1 3 2 julia> A = ['a','b','c','d']; julia> B = A[v]…

さて,ここで問題です Challenge0001 (Python)

a, b, c, d の4個の数字を入力とする もしどれかが 0 なら,それぞれに 0.5 を加える x = a * d / (b * c) としたとき,x か 1 / x の大きい方を返す関数を定義せよ 言語は問わない。合計文字数が少ない方がいいぞ! 解答例は,ずっとスクロールダウンして..…

Julia -- 10-6(配列)

配列関数 累積的な演算 accumulate(op, A; dims::Integer, [init]) 累和 julia> accumulate(+, [1,2,3])3-element Array{Int64,1}: 1 3 6 累積 julia> accumulate(*, [1,2,3])3-element Array{Int64,1}: 1 2 6 julia> accumulate(+, [1,2,3]; init=100)3-ele…

Julia -- 10-4(配列)

配列の連接 cat(), vcat(), hcat() vcat() は第 1 次元で cat() julia> a = [1 2 3 4 5]1×5 Array{Int64,2}: 1 2 3 4 5 julia> b = [6 7 8 9 10; 11 12 13 14 15]2×5 Array{Int64,2}: 6 7 8 9 10 11 12 13 14 15 julia> vcat(a,b)3×5 Array{Int64,2}: 1 2 3 …

Julia -- 10-2(配列)

ベクトルの作成と初期化 Vector{T}(undef, n)初期化されていない,要素数 n の 型 T のベクトルを作る julia> Vector{Float64}(undef, 3)3-element Array{Float64,1}: 2.2910037355e-314 2.2881675853e-314 2.2881675853e-314 julia> Vector{Union{Nothing, …

Julia -- 9(制御構文)

制御構文 複合式 begin, ; begin と end で囲まれた式を,順に実行する。最後の式の評価値が返される。 julia> z = begin x = 1 y = 2 x + y end3 1 行に 1 つの式しか書けないということではない。一行にまとめて書くこともできる。それぞれの式は ';' で区…

Julia -- 5(関数)

関数定義 -- 伝統的形式 'function' で始まり,関数名,仮引数のタプルが続く。2 行目から関数の内容を記述する。一番最後に評価された式の値が戻り値になる。'return 戻り値' で任意の時点で呼出元へ復帰することもできる。戻り値がない場合は 'return noth…

Julia -- 7(多倍長演算)

GNU Multiple Precision Arithmetic Library (GMP) と GNU MPFR Library を使える。 julia> BigInt(typemax(Int64)) + 19223372036854775808 julia> big"123456789012345678901234567890" + 1123456789012345678901234567891 julia> parse(BigInt, "12345678…

Julia -- 6(プログラムの実行)

ファイルに書かれたプログラム ファイル名(拡張子は ".jl") first.jl 内容 for i = 0:10 print(i, '\n')end 1. 対話モードのときは julia> include("first.jl") 2. コマンドライン(ターミナル)から実行するときは $ julia first.jl 一般的には, $ julia…

Julia -- 4(ベクトル,行列)

データ構造 行ベクトル julia> [1 2 3 4 5]1×5 Array{Int64,2}: 1 2 3 4 5 列ベクトル julia> [2, 4, 6]3-element Array{Int64,1}: 2 4 6 julia> [2; 4; 6] # 列ベクトルの場合には,このように書いても同じ。3-element Array{Int64,1}: 2 4 6 行列 「行ベク…

np.nan == np.nan は? (Python)

import numpy as npprint(np.nan == np.nan)print(np.nan != np.nan) の結果がどうなるか答えよ 答えは,スクロールした,ずーーーと下の方にある print(np.nan == np.nan) は Falseprint(np.nan != np.nan) は True 正しくは is, is not を使うべきなのだ p…

Julia -- 3(算術演算子,数学関数,文字関数)

算術演算子 和 +, +(x, y, ...) julia> 1 + 23 julia> +(1, 2)3 julia> 1 + 2 + 3 + 4 + 515 julia> +(1, 2, 3, 4, 5) # 累和15 差 -, -(x, y) julia> 10 - 37 julia> -(10, 3)7 積 *, *(x, y, ...) julia> 2 * 36 julia> *(2, 3)6 julia> 1 * 2 * 3 * 4 * 5…