2011-06-11 8 views
3

通常、Table[ ]コマンドは、イテレータと同じカーディナリティを持つリストを返します。テーブル[]出力カーディナリティ

Table[i, {i,4}] 
(* 
->{1,2,3,4} 
*) 

それはイテレータ

Table[Sequence @@ ConstantArray[1, i], {i, 2}] 
(* 
->{1,1,1} 
*) 

より大きなカーディナリティとリストを返すことが可能である示すことは容易である。しかし...LESSでリストを返すための方法があります。カーディナリティはイテレータよりも大きいですか?

+0

'表[配列@@ {、{i、10}]'? – Pablo

+0

@Pablo回答を投稿する! –

+0

これは奇妙な質問です。なぜあなたはそれを聞いているのか分かりますか? –

答えて

1

簡単な例:

Table[Sequence @@ ConstantArray[1, i - 1], {i, 2}] 
Out[1] = {1} 

この必要性は常に小さいカーディナリティでリストを返しません。たとえば、{i,3}は等価を返し、{i,4}はさらに多くを返します。

あるいはsillier例は

Table[Sequence @@ {}, {i, 2}] 

だろうが、それはカウントしている場合は、私にはわかりません。


ます。また、これは動作するはずPiecewise

Table内部
Table[Sequence @@ Piecewise[{ 
    {ConstantArray[1, i], i < 3}, 
    {ConstantArray[2, i], 3 <= i < 5}, 
    {{}, i >= 5}}], 
{i, 20}] 

Out[2] = {1, 1, 1, 2, 2, 2, 2, 2, 2, 2} 
+0

しかし、 'Sequence @@ {}'や条件付きの構造体を使って、あなたが望む任意の長さを出力できると思います。 –

+0

@belisarius:イテレータよりも一定の固定数を返す例をお探しですか? – abcd

+0

私は可変長出力が必要なときに、通常、 'IF [cond、AppendTo [..]]'で 'Scan'を使います。私は、誰かがこの場合に 'テーブル 'を使うために何かきちんとしたものになっているかどうかを見たいと思っています。 –

3

を使用することができます。

Table[Sequence @@ {}, {i, 10}] 
3

私は今、あなたの意図を理解していると仮定すると、私は「上の利点が表示されません「フライ」除去をTable内で実行する。一つは、のようなもので、それを達成することができます:

Table[If[[email protected], i, ##&[]], {i, 25}] 

が、Joinを使用する方が速い:

Join @@ Table[If[[email protected], {i}, {}], {i, 25}] 

またはDeleteCases

DeleteCases[Table[If[[email protected], i], {i, 25}], , 1] 

と、この単純なケースでは

Selectは以上です2倍の速さ:

Table[i, {i, 25}] ~Select~ EvenQ 

メモリ使用の問題がある場合は、Sequenceを使用する最初の方法が先に出ますが、Joinメソッドがそれほど遅れているわけではありません。

+0

後処理は常に可能ですが、要素(例えば画像)が増えるにつれてますます不便になります。イメージを一連のカーネルで畳み込み、一定の基準を満たす結果のみを保持したいとします。もちろん、Table []は良い選択肢ではありませんが、私はそのような場合にどのように使用するかについてのアイデアを得たいだけです。あなたのご意見ありがとうございます! –

+0

@ belisarius、後処理が不便または問題があると分かっている例を投稿してもよろしいですか? –

+0

私はそれを実装する方法がたくさんあるので、私は実際の例を投稿しなかったのです。時には私は私が探しているものが主観的な推薦であり、それらの質問は "主観的または議論的"としてSOで閉じられたり、削除されたりするリスクがあり、他の人が答えるときに迷惑をかけることがあるので、 –

関連する問題