[#21157] あったらうれしいメソッド to_n, to_n!, to_s! — ogino@...

荻野です。あったらうれしいメソッドということで書いてみます。

16 messages 2000/03/03

[#21159] メソッドの入り口 — ogino@...

荻野です。もうひとつご指導ください。

93 messages 2000/03/03
[#21170] Re: メソッドの入り口 — Shin-ichiro Hara <sinara@...> 2000/03/03

原です。

[#21243] Re: メソッドの入り口 — keiju@... (石塚圭樹) 2000/03/07

けいじゅ@日本ラショナルソフトウェアです.

[#21247] Re: メソッドの入り口 — 中村暁史 Nakamura Akifumi <BXQ04723@...> 2000/03/07

[#21267] 引数コピーとオブジェクト指向 (Re: メソッドの入り口) — Hideto ISHIBASHI <s34204@...> 2000/03/08

石橋秀仁です。

[#21272] Re: 引数コピーとオブジェクト指向 (Re: メソッドの入り口 ) — 中村暁史 Nakamura Akifumi <BXQ04723@...> 2000/03/08

[#21276] Re: 引数コピーとオブジェクト指向 (Re: メソッドの入り口 ) — nobu.nakada@... 2000/03/09

なかだです。

[#21279] Re: 引数コピーとオブジェクト指向 (Re: メソッドの入り口 ) — ogino@... 2000/03/09

oop未満の世界観の荻野です。

[#21282] Re: 引数コピーとオブジェクト指向 — Tomoyuki Kosimizu <greentea@...2.so-net.ne.jp> 2000/03/09

越水です。

[#21285] Re: 引数コピーとオブジェクト指向 — ogino@... 2000/03/10

荻野です。

[#21293] Re: 引数コピーとオブジェクト指向 — Matsuo Hisanori <hisanori@...> 2000/03/10

松尾です。

[#21297] Re: 引数コピーとオブジェクト指向 — ogino@... 2000/03/10

荻野です。

[#21302] Re: 引数コピーとオブジェクト指向 — 土岐 仁謙 <toki@...> 2000/03/10

土岐です。

[#21371] Re: 引数コピーとオブジェクト指向 — Matsuo Hisanori <hisanori@...> 2000/03/13

松尾です。

[#21374] Re: 引数コピーとオブジェクト指向 — TADA Tadashi <sho@...> 2000/03/13

ただただしです。

[#21365] Re: 引数コピーとオブジェクト指向 — Matsuo Hisanori <hisanori@...> 2000/03/13

松尾です。

[#21280] raise non-Exception object — Kenichi Komiya <kom@...3.rim.or.jp>

24 messages 2000/03/09
[#21283] Re: raise non-Exception object — nobu.nakada@... 2000/03/09

なかだです。

[#21315] Re: raise non-Exception object — Kenichi Komiya <kom@...3.rim.or.jp> 2000/03/11

[#21342] Re: raise non-Exception object — nobu.nakada@... 2000/03/12

なかだです。

[#21384] ruby 1.4.4 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

35 messages 2000/03/13

[#21442] 配列内のソート — Takayuki Tanaka <tanaka@...>

こんにちは Tanです。

16 messages 2000/03/15

[#21583] ruby for Web — TAKAHASHI Masayoshi <maki@...>

高橋征義です。

27 messages 2000/03/22
[#21584] Re: ruby for Web — "NAKAMURA, Hiroshi" <nakahiro@...> 2000/03/22

なひです.

[#21649] net-1.1.10 — TAKAHASHI Masayoshi <maki@...>

高橋征義です。net/http 使いたおし中。

17 messages 2000/03/27

[#21669] new version of mod_ruby & eRuby — Shugo Maeda <shugo@...>

前田です。

14 messages 2000/03/28

[ruby-list:21121] Re: transpose, each_thread, etc...

From: Shin-ichiro Hara <sinara@...>
Date: 2000-03-01 06:46:51 UTC
List: ruby-list #21121
原です。

In message "[ruby-list:21109] Re: transpose, each_thread, etc..."

|お世話になっております。 A.中村です。

|>(2) Array#transpose
|>いわゆる行列の転置を組み込みにする事の提案です。つまり、
|>  arrays = [["a", 97], ["b", 98], ["c", 99]]
|>に対して
|>  arrays.transpose #=>[["a", "b", "c"], [97, 98, 99]]

|これ、3次元以上になったらどう考えるのが妥当なんでしょう?
|次元のrotateっていう感じなのでしょうか?

よい質問です。(^^; 配列の奥の方がまた配列になっていたとしても、短なるオ
ブジェクトとして扱った方がいいのではないかと思うんですよね。つまり一番浅
い2つだけを交換すると。

データの基本的な形として

  データ=レコードの配列
  レコード=フィールドの配列

というのがあると思うんですよ。つまり2次元配列は特別扱いしてい
いのではないでしょうか。

まあ、無理すれば任意の2次元を選んで交換できますが。

  data = [[["000", "001"], ["010", "011"]],
          [["100", "101"], ["110", "111"]]]
  data.transpose  # 0 <-> 1
  data.collect{|x| x.transpose} # 1 <-> 2
  data.transpose.collect{|x| x.transpose}.transpose # 0 <-> 2

しかしそういうのは Tensor クラスとかを作って対応すべきかな。

|あと、次元が不揃いだったら…例外で門前払いですか?

確かにこれが問題です。この辺を組み込みで適当にやってもらえる所がありがた
いところでもあるのですが。あり得るのは、

(1) 不揃いな次元は例外発生。
(2) transpose(n) と各要素の次元 n を指定できる。
(3) 最大の配列で次元を決めてしまう。
(4) 最初の配列で次元を決めてしまう。

ぐらいでしょうか。(4)なら

  class Array
    def transpose
      (0..(self[0].size-1)).collect{|i| collect{|a| a[i]}}
    end
  end

と書けます。書けるけれど、難しいですよね。

もう少し transpose の有用性をアピールしておくと、例えば、しばしばテーブ
ル型のデータのインターフェースの相違を吸収してくれるでしょう:

  Hash[*[keys, values].transpose.flatten]

の様に。

また、数値のテーブルの総和を求める縦横計算ってありますよね。transpose が
あれば、

  tot = table.collect{|x| x + [sum(x)]}
  tot << tot.transpose.collect{|x| sum(x)}

で済んでしまいます。(今だかつてない簡便さじゃない?)

-----^ test-transpose.rb
#!/usr/bin/ruby
class Array
  def transpose
    (0..(self[0].size-1)).collect{ |i| collect{ |a| a[i] } }
  end
end
def sum(array, tot = 0)
  array.each do |x| tot += x; end
  tot
end

table = DATA.readlines.collect{|x|
  x.chomp.split.collect{|y| y.to_i}
}
tot = table.collect{|x| x + [sum(x)]}
tot << tot.transpose.collect{|x| sum(x)}
tot.each do |x|
  puts " %3s" * x.size % x
end

__END__
11 22 33
44 55 66
77 88 99
12 34 56
-----$ test-transpose.rb
=>
  11  22  33  66
  44  55  66 165
  77  88  99 264
  12  34  56 102
 144 199 254 597

って、こういう話は ruby-dev でしたか。なんか成行きで、、、(^^;

In This Thread