antimon2 💯 is a user on mathtod.online. You can follow them or interact with them if you have an account anywhere in the fediverse. If you don't, you can sign up here.

[1:10]だと範囲型の1要素の1次元配列ができる←分かる
[1:10;]だと1, ..., 10を要素に持つ10要素の1次元配列ができる←分からない

このセミコロンの意味って何だ

mathtod.online/web/statuses/25
@mathmathniconico

[〜;〜]は、配列のconcatenation表記です。`〜`にスカラーまたはベクトル(=1次元配列)を渡すとそれを全て連結したベクトル(1次元配列)を返します。
[1:10;]は、その2つめを指定しなかったことになり、1つのベクトル(に変換できるもの)を渡してベクトルに変換だけを実施して、結果1〜10を要素に持つ配列が返ってきます。

ちなみに[〜;〜]は縦方向の連結(`vcat()`関数の呼び出しに相当)で、`[1:10;2:2:20]` は `vcat(1:10,2:2:20)` と等価(1,…,10,2,4,…20 からなる20要素の1次元配列が返る)です。`[1:10 2:2:20]`と半角スペース区切にすると`hcat(1:10,2:2:20)`と等価になり結果は

$$
\begin{pmatrix}
1&2\\
2&4\\
\vdots&\vdots\\
10&20
\end{pmatrix}
$$
という10x2行列(2次元配列)になります。

@antimon2 ありがとうございます。セミコロンで縦に繋いで、スペースで横に繋ぐんですね。行列の要素を指定する単なる表記上のものかと思ってましたが、裏では複雑な処理を(型に応じて)行ってるんですね。

antimon2 💯 @antimon2

@mathmathniconico
ちなみに、
[1 (2:10)';2:10 Matrix(I,9,9)]
または
[1 (2:10)'
2:10 Matrix(I,9,9)]
とか書くと

$$
\begin{pmatrix}
1&2&3&\dots&10\\
2&1& & & \\
3& &1& &\smash{\llap{\Huge{0}}}\\
\vdots& & &\ddots& \\
10&\smash{\rlap{\Huge{0}}}& & &1
\end{pmatrix}
$$

となります(半分$\TeX$で行列にでっかい`0`を埋め込む練習したかっただけw)。

このときは `hvcat()` という hcat と vcat 両方の機能を持つ関数呼び出しと等価になります。仰る通りよくある行列の書式(例:[1 2;3 4])も内部的に `hvcat((2,2),1,2,3,4)` みたいに解釈されています。

· Web · 4 · 5