MEP 17: スカラーの繰り返しでベクトルを作る
- Created: 2024-04-21 10:07:01
Metalなどでfloat4(0.0)などと書くものに相当する事をやりたい。
Metal
float4(0.0)
GLSL
vec4(0.0)
Swift
[Int](repeating: 0.0, count: 4)
R
rep関数。rep function - RDocumentation
rep(0.0, times=4)
Rust
Rustにはセミコロンという特殊なシンタックスがある。
[0.0; 4]
numpy
numpyはzeros、oneと専用の命令があり、またfullという一般のもある。
np.zeros(5)
np.full(5, 0.0)
数字の所はshape(多次元も指定出来る)。
MFGの事情
float4などは、既に型がf32などとサイズをつける事にしているので出来ない。 vec4はやっても良いが、スカラー以外のものをサポートする理由が無く、スカラーだけだとややこしさもあるかもしれない。 シェーダープログラマは、vec3(1, 2, 3)などが出来ないのはなぜ?となるだろう。 サポートしてもいいが、[1, 2, 3]と完全に同じ挙動になってしまうので、あまり気が乗らない。 まぁvec3(1)とやるもので、複数いれるものは単にタプルとせい、とドキュメントに書けば十分かもしれない。
個人的にはRに慣れているので、rep3とrep4がいいんじゃないか、という気もする。rep3(0.0)、rep4(0.1)は十分に分かりやすい。 Swift風にrepeat(0.0, times=3)でもいいんだが、型チェックの簡便さから、出来たら3とか4の次元は関数名に入れたいし、ちょっと野暮ったい気もする。
暫定的にvec3、vec4で実装してみる。