質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

3回答

4123閲覧

配列における行列表現および座標表現について

manman

総合スコア233

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2015/09/21 17:05

編集2015/09/21 20:31

多重配列を使わず、行列や座標の計算をしたい場合を考えることとします。
(この考え方自体は、
例えば二重配列を使わず番兵を置いて二次元を表現したりすることを考えれば
自然な考え方と言えると思っています。)

Ruby

1ary = [ 21, 2, 3, 34, 5, 6, 47, 8, 9 5]

①ary が行列を表しているとします。
このとき、(1, 2)成分は6になると思っています。

一方、
②ary が座標の値を表しているとします。
このとき、(1, 2)の値は8になると思っています。

すなわち、
行列では通常の数学の行列と同じように、
座標では右方向がx軸、下方向がy軸となる
と思って通常使っていたのですが正しいのでしょうか?
(①と②では縦と横が逆になっているのは自然なことかどうか
をたずねています。)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

... 多重配列を使わず、行列や座標の計算をしたい...

2次元配列の index [x, y] を 1元配列のどの index に対応させるかを
x * x_len + y
y * y_len + x
のどちらにするかは、利用する側の自由です。
行列だから、座業だからといって、どちらを使うかが決まっているわけではないと思います。

この方法の延長で 2次元配列だけでなく、3次元, 4次元の行列のや座標も、1次元の配列に対応させることができます。
(コンピューター上のメモリは 1次元です。
コンパイラーやインタプリターが、内部で n次元配列を1次元配列への対応付けを行ってくれています)

蛇足:
ary = [
[1,2,3],
[4,5,6],
[7,8,9]
]
とした場合は、n 次元 -> 1 次元への単純な計算での対応付けとはなりません。
ary[x][y] としないとアクセスできません。
[1,2,3] と [4,5,6] がメモリー上で連続しているとは限らないからです。

投稿2015/09/22 00:14

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

manman

2015/09/22 05:04

コードを書いている人によってindex対応の仕方がまちまちなような気がしたので、質問してみました。質問における①②はあくまで私が勝手に決めたルールだったのかもしれません。
guest

0

データが何を表しているのかは関係なく、便利な方向を使えば良いのでは無いでしょうか。
sliceで切り出したりすることがあるのであれば、それがうまく使える方向。

aryからの行ベクトルの切り出し: ary[3...6]
aryからの列ベクトルの切り出し: ary[1]+ary[4]+ary[7]

投稿2015/09/21 23:42

otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

素直に解釈するならば、提示されている配列は1行9列の行列とみなされると思います。
一次元配列を、直接的に二次元行列のような形式で呼び出すことはできません。

つまり、提示されたケース①、②はどちらも正しくなく、また、プロセスの方法によっては
どちらとしても扱うことができるかと思われます。

配列で行列を表すならば、二次元配列を使うのが一般的ではないでしょうか?

以下のように表現して、

ruby

1ary = [ 2[1,2,3], 3[4,5,6], 4[7,8,9] 5]

以下のように呼び出します。

ruby

1ary[0][0] = 1 2ary[0][1] = 2 3ary[0][2] = 3 4... 5ary[2][1] = 8 6ary[2][2] = 9

といった具合です。

投稿2015/09/21 19:54

SKYYFISH

総合スコア654

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問