« 2019年5月 | トップページ | 2019年7月 »

2019年6月25日 (火)

[Octave]標準正規分布に従う確率変数(乱数)を得る

randn関数を使う。引数には、発生させる乱数の数を与える。

> randn(1)
ans = 2.9256
> randn(3)
ans =
0.14849 -1.65450 -0.63153
1.00336 0.56755 0.23638
0.13845 -0.40872 1.38998

引数が1つの場合は、乱数からなるその次数の正方行列を返す。引数を2つ与えると、任意の大きさの行列を返す。

> randn(3, 2)
ans =
1.229068 -0.953506
0.579371 -0.849324
-0.082636 0.257047

[R]スプライン関数によるデータの平滑化

smooth.spline関数を使う。Rの初期状態で使うことができる。以下、実行例。

> x <- c(1, 2, 4, 6, 8, 16)
> y <- c(0, 1, 2, 4, 3, 5)
> r <- smooth.spline(y ~ x, all.knots = TRUE)
> estx <- seq(min(x), max(x), length.out = 80)
> esty <- predict(r, estx)$y
> plot(x, y)
> lines(estx, esty, col = "red")
> print(r)
Call:
smooth.spline(x = y ~ x, all.knots = TRUE)
Smoothing Parameter spar= 0.5378882 lambda= 0.006212978 (14 iterations)
Equivalent Degrees of Freedom (Df): 2.943406
Penalized Criterion (RSS): 1.55995
GCV: 1.001812

Figure1 

[R]標準正規分布に従う確率変数(乱数)を得る

rnorm関数を使う。引数には、発生させる乱数の数を与える。

> rnorm(1)
[1] -1.35796
> rnorm(3)
[1] -0.5810260 -2.1525327 0.2157626

標準正規分布とは、平均が0、標準偏差が1の正規分布である。0付近の数値が多く得られ、正負の実数が得られる。

2019年6月22日 (土)

[C#]エラーメッセージ:ハンドルされていない例外: System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。

コンパイルした実行ファイル(*.exe)を実行したときにこのエラーメッセージが表示されたら、配列で宣言したクラスを使用する前に初期化をしているか確認する。

例えば以下のような使い方をすると、このエラーメッセージが表示される。Carは自作クラス。

Car[] kokusan = new Car[10];
kokusan[0].kakaku = 0;

配列として宣言しただけでは使うことはできず、各要素を使用する前に要素ごとに初期化をしなければならない。

Car[] kokusan = new Car[10];
kokusan[0] = new Car();
kokusan[0].kakaku = 0;

2019年6月21日 (金)

[Python]浮動小数点数を任意の桁数表示の文字列に変換する

formatメソッドを使う。書式の指定に f を使う。

>>> "{0:.4f} {1:.4f}".format(12.34, 5.678)
'12.3400 5.6780'
>>> "{0:9.3f} {1:9.5f}".format(12.34, 5.678)
' 12.340 5.67800'

コロン(:)の左側の数字は、formatメソッドの何番目の引数かということ。0から始まることに注意。

 

2019年6月19日 (水)

[Open JDK]Open JDK(Windows版)のインストール

  1. 公式ページ(http://openjdk.java.net/)を開く。
  2. 2019年6月現在の最新版は12。ダウンロードページ(http://jdk.java.net/12/)を開く。
  3. Windows版がまとめられているZIPファイル(https://download.java.net/java/GA/jdk12.0.1/69cfe15208a647278a19ef0990eea691/12/GPL/openjdk-12.0.1_windows-x64_bin.zip)をダウンロードする。
  4. ダウンロードしたファイルをC:\に展開する。jdk-12.0.1フォルダーを頂点としたツリー構造になっているため、そのまま展開しても問題はない。
  5. C:\jdk-12.0.1\binにパスを通す。これで、PowerShellなどでコンパイラ等を使うことができるようになる。

2019年6月17日 (月)

[R]小数を任意の桁数表示の文字列に変換する

sprintf関数を使う。書式の指定に f を使う。

> cat(sprintf("%.4f %.4f\n", 12.34, 5.678))
12.3400 5.6780
> cat(sprintf("%9.3f %9.5f\n", 12.34, 5.678))
12.340 5.67800

 

2019年6月15日 (土)

[C#]小数を任意の桁数表示の文字列に変換する

WriteLineメソッド等で書式を指定する。書式の指定に f を使う。

> Console.WriteLine("{0:F4} {1:F4}", 12.34, 5.678)
12.3400 5.6780
> Console.WriteLine("{0,9:F3} {1,9:F5}", 12.34, 5.678)
12.340 5.67800

最初の例では、コロン(:)の左側の数字は、書式以降に指定した何番目の引数かということ。0から始まることに注意。

2番目の例では、コンマ(,)の左側の数字は、書式以降に指定した何番目の引数かということであり、コンマ(,)とコロン(:)に挟まれた数値は文字列の文字幅を示す。

 

2019年6月13日 (木)

[R]ベクトルの要素の総乗を計算する

prod関数を使う。

> v <- c(2, 3, 5, 9)
> prod(v)
[1] 270

2019年6月10日 (月)

[Octave]LU分解を行う

lu関数は引数に与えた行列をLU分解する。以下、実行例。

> mx = [2 -3 -1; 1 / 2 1 -1; 0 1 -1];
> mx
mx =
2.00000 -3.00000 -1.00000
0.50000 1.00000 -1.00000
0.00000 1.00000 -1.00000
> [mxl, mxu] = lu(mx)
mxl =
1.00000 0.00000 0.00000
0.25000 1.00000 0.00000
0.00000 0.57143 1.00000
mxu =
2.00000 -3.00000 -1.00000
0.00000 1.75000 -0.75000
0.00000 0.00000 -0.57143

2019年6月 8日 (土)

[R]LU分解を行う

Matrixパッケージのlu関数を使うと、行列のLU分解が簡単に行える。expand関数と併用すること。以下、実行例。

> library(Matrix)
> v <- c(2, -3, -1, 0.5, 1, -1, 0, 1, -1)
> mx <- matrix(v, 3, 3, byrow = TRUE)
> mx
[,1] [,2] [,3]
[1,] 2.0 -3 -1
[2,] 0.5 1 -1
[3,] 0.0 1 -1
> expand(lu(mx))$L
3 x 3 Matrix of class "dtrMatrix" (unitriangular)
[,1] [,2] [,3]
[1,] 1.0000000 . .
[2,] 0.2500000 1.0000000 .
[3,] 0.0000000 0.5714286 1.0000000
> expand(lu(mx))$U
3 x 3 Matrix of class "dtrMatrix"
[,1] [,2] [,3]
[1,] 2.0000000 -3.0000000 -1.0000000
[2,] . 1.7500000 -0.7500000
[3,] . . -0.5714286
> mxl <- expand(lu(mx))$L
> mxu <- expand(lu(mx))$U
> mxl %*% mxu
3 x 3 Matrix of class "dgeMatrix"
[,1] [,2] [,3]
[1,] 2.0 -3 -1
[2,] 0.5 1 -1
[3,] 0.0 1 -1

2019年6月 3日 (月)

[R]データフレーム内のデータを特定の列の値でソートする

order関数を組み合わせて使うことで、ソートされたデータフレームを得ることができる。

以下は、一列目の値(A~Cのいずれかからなる文字)と二列目の値(1~4のいずれかからなる数値)でソートした例。

> a <- c("C", "B", "B", "A")
> b <- c(1, 2, 1, 4)
> dtf <- data.frame(a, b)
> dtf
a b
1 C 1
2 B 2
3 B 1
4 A 4

まずは、二列目の値でソートする。order関数は初期状態では昇順でインデックスを返すため、そのとおりに並び替えられる。同じ値は、先に登場した順となる。

> dtf[order(dtf$b), ]
a b
1 C 1
3 B 1
2 B 2
4 A 4

一列目の値でソートし、次に二列目の値でソートする。直前の例と異なるのは、最初のソート(一列目のソート)はそのままに、その際に最初のソートの同じ値の中でさらにソートをしている。

> dtf[order(dtf$a, dtf$b), ]
a b
4 A 4
3 B 1
2 B 2
1 C 1

order関数は、引数に負数を与えるとソートを逆向きに行う。数値の場合は降順となる。

> dtf[order(dtf$a, -dtf$b), ]
a b
4 A 4
2 B 2
3 B 1
1 C 1

« 2019年5月 | トップページ | 2019年7月 »

無料ブログはココログ

■■

■■■