あけましておめでとうございます
ほんねんもよろしくおねがいします
去年の秋頃,ザッピング中に見た算額
もしかしたらどこか間違いがあるかもしれないが
大きな円(青)の中に,三種類の円(赤,緑,黒)が詰め込まれている
それぞれの円は 1 点で接している
三種類の円の半径を大きな円の半径で表しなさい
この図を書いたのは解が得られたからではない
近似的にこんなふうになるということで
今まで,折りに触れ考えてきたが,わからない
今年中に解決できるだろうか
あけましておめでとうございます
ほんねんもよろしくおねがいします
去年の秋頃,ザッピング中に見た算額
もしかしたらどこか間違いがあるかもしれないが
大きな円(青)の中に,三種類の円(赤,緑,黒)が詰め込まれている
それぞれの円は 1 点で接している
三種類の円の半径を大きな円の半径で表しなさい
この図を書いたのは解が得られたからではない
近似的にこんなふうになるということで
今まで,折りに触れ考えてきたが,わからない
今年中に解決できるだろうか
関数のネスト表示 a(b(c(d(x)))) が醜いというので x |> D |> C |> B |> A としましょう!ということである。もともとの関数 a, b, c, d はそのままでも良いこともあるが,パイプで受け渡されるデータが第一引数でなければならないという制約で,A, B, C, D という亜型関数が必要になる。ユーザ側で定義することもできるが,胴元は自分の好きなように関数をつくることができる。一般ユーザはそれを使わざるを得ない。
例えば,
1 F T T F F F F F F F T
2 F T F F F F F F F F T
3 F F F T F T T F F T F
4 F F T F F F F T F F F
5 F F F F F F F F F F F
:
のようなデータを読んで,
11×11 Matrix{Int64}:
0 59 62 86 61 86 89 84 56 145 82
59 0 33 55 41 52 47 49 42 48 54
62 33 0 44 31 51 45 46 35 56 56
86 55 44 0 73 173 167 97 63 89 71
61 41 31 73 0 75 60 54 42 63 54
86 52 51 173 75 0 170 71 54 90 66
89 47 45 167 60 170 0 77 45 85 64
84 49 46 97 54 71 77 0 60 78 144
56 42 35 63 42 54 45 60 0 52 52
145 48 56 89 63 90 85 78 52 0 86
82 54 56 71 54 66 64 144 52 86 0
のような集計表をつくる。
具体的には,ファイルの1列目を除いて,読み込んだデータを x として行列乗算 x' * x を計算し,対角成分を 0 にする。だけの話だ。
これをパイプを使って書くためには,余分な関数を定義しないといけない(のだろうなあ)。
Matrix はすでにあるものを使える。
x' * x は単純な処理だが,関数にしないといけない。
同じく,対角成分を 0 にするだけのくだらない関数を書かないといけない。
using CSV, DataFrames
matmul(x) = x' * x
function diag_zero(x)
for i in 1:size(x, 1)
x[i, i] = 0
end
x
end
出来上がったパイプは,こうだ。
x = CSV.read("sampledatacross2.csv", DataFrame, truestrings=["T"], falsestrings=["F"], drop=[1]) |> Matrix |> matmul |> diag_zero
どこがわかりやすい?
余分な関数定義は自分で定義するか,誰かに頼んで,定義しなくても使えるようにしてもらうしかない。
必要な関数はどんどん増える(いちいち定義しなくてはならないかもしれないのだ)。