(mathematica)Tableで配列された変数の一括定義

このQ&Aのポイント
  • 手打ちで変数に値を割り当てる場合は、{a[1],a[2],a[3]}={1,2,3}と記述します。
  • Tableコマンドを使用して一括で変数に値を割り当てる場合は、Table[a[i],{i,3}]={1,2,3}と記述します。
  • バージョン6のMathematicaを使用している場合でも、Tableコマンドを使用することができます。
回答を見る
  • ベストアンサー

(mathematica)Tableで配列された変数の一括定義

例えば、手打ちで {a[1],a[2],a[3]}={1,2,3} ------(1) とした場合はa[1],a[2],a[3]それぞれに1,2,3が割り当てられますが、これをTableコマンドを使って Table[a[i],{i,3}]={1,2,3} としてもa[1],a[2],a[3]には何も割り当てられません。Tableコマンドを使って、(1)と同じように配列内の変数を一括に定義できる操作がわからなくて困っています。mathematicaに詳しい方ご存知でしたらぜひ教えてください! ちなみに私はmathematicaのver6を使っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • 330k
  • ベストアンサー率100% (6/6)
回答No.1

"="(Set)はHoldFirst属性がありますので,第1引数("="の左辺)は評価されません.なので,先にEvaluateを使って左辺を評価すればできます. Evaluate[Table[a[i],{i,3}]]={1,2,3} このときa[1],a[2],a[3]が既に定義されているとエラーになりますので,そのときはClear[a]などとしてから実行する必要があります. とはいっても,Mathematicaで配列を扱う方法としては,リストを使う方法が一般的です. a = {1,2,3} として定義しておいて,各要素にはa[[1]],a[[2]],a[[3]]としてアクセスします.リストにしておけばMapやApply,Selectなどの豊富なMathematica標準の関数が使えます. もちろん添数付きオブジェクト(a[1],a[2],...)として定義する方法には,添数が飛び飛びの場合やシンボルを引数にするときなどに便利ですが.

mot5138
質問者

お礼

回答ありがとうございます。無事解決することができました! 今まですごく面倒な方法で配列の変数に値を定義していたので、 これでずいぶん改善させることができます。 ほんとに助かりました!

関連するQ&A

  • 【Mathematica】 Protectされているとは・・・?

    Mathematica初心者です。 変数を使っているときに、 よく下のようなエラーが出てしまいます。 「Set::Write : Tag Times in ○○ is Protected.」 よく分からないまま、 Unprotect[○○]; として回避しているのですが、 変数や配列を定義するたびに、 Unprotectを使わなければならなくなってしまっています。 いったいProtectとは何なんでしょうか? ちなみに、○○の中は、いわゆる予約語ではなく、適当な文字です。 特にプログラムに(2次元の)リストを使っているときに起こります。 どなたかお分かりになる方、教えてください。

  • 配列変数のアドレス

    C言語で、配列を宣言した場合、 char a[] = "hoge"; 変数aは初期化された配列の先頭番地を指しているのですが、この時、 変数aの中身も変数aのアドレス(&a)ともに上記の配列の先頭番地になっているようなのですが、 これによって、配列の変数aは読み取り専用で、書き換えられないということにしていると思っていいのでしょうか? ちなみに、 char *p = "fuga"; とした場合は、pと&pのアドレスは異なって、pの中身は書き換えられます。

  • Excelのセルから配列変数への一括読込み

    VB(というかプログラミング)の超初心者です。 Excelシートの任意の領域にある数値を、配列変数に一括して 入力したいと思っています。 これまで、 Dim XXX(10) As Variant For I = 1 To 10 XXX(I - 1) = Cells(1, I).Value Next I Range(Cells(10, 1), Cells(10, 10)).Value = XXX の様な感じで処理していましたが(最近まで、セルへの書込みも For-Nextで処理していました)、データ数が多くなると処理に 時間がかかってしまいます。 配列YYYへの読込みもセルへの書込みの様に一括して行うには どうすれば良いでしょうか? よろしくお願いします。

  • ユーザー定義型変数の一括初期化

    ユーザー定義型の変数を初期化する場合、 各エレメントごとに初期化をすればいいのですが、 C言語のmemset()の様に、一括で初期化をする方法はありますか?

  • 配列の定義について

    配列とは、同じ形式のデーターを連続した記憶領域で確保するためのものである。 配列を構成する個々の領域を要素と呼び、要素の位置を添え字で示す。 Javaでは配列の先頭の要素を(0)番目と呼ぶ。 今、hairetsuという名前で10個の整数からなる配列を定義したい。 この場合の配列は(0)番目から始まり、終端は(9)番目である。 これを定義するには (int[] hairetsu;) (hairetsu = new int[10];) のように2行で行う方法と、 (int[] hairetsu = (new int[10];) のように、一行で行う方法がある。 Javaでは定義済みの配列の要素数は、配列変数名.(length)で知ることができ、 終端は(length + 1)番目となる。 したがって(length + 1)番目以降を使おうとすると、 配列要素の範囲外で(例外)が発生する。 この文章の( )の中は間違っていますか?

    • ベストアンサー
    • Java
  • エクセルのVBAでオブジェクトの配列変数は使えますか?

    VBですとオブジェクトの配列変数というか、コピーしたときに自動的に配列になってしまいますが、エクセルのVBAの場合でオブジェクトの配列変数は使えますか? なにをしたいかというと、ボタンが多すぎて一つ一つにプログラム定義は面倒、そこで配列にしてまわすことにしたいのですが、エクセルで可能でしょうか。 どなたかお願いします。

  • 配列変数の各要素を違う変数名で再定義するには

    Cプログラム初心者です。よろしくお願いします。 配列dm_dat[1000]の各要素を違う変数名(連続した)DM0からDM999の変数名で再定義したいのですが(グローバル変数として)、#define DM0 dm_dat[0]~#define DM999 dm_dat[999]を実際に入力するのはいやなので、他に簡単にすませる方法はないでしょうか?DM0でなくDM(0)なら#define DM(i) dm_dat[i]とできるのですが・・初心者には難しいです。 どなたか、教えてくださるとありがたいです。

  • 配列を使わずに、数字(連番)を使用した変数に値を代入したい。

    配列を使わずに、数字(連番)を使用した変数に値を代入したい。 お世話になっております。 配列を使わずに、数字(連番)を使用した変数($a1,$a2,$a3・・・)に、 forループを使って、値を代入したい。 #================================= for($i;$i<10;$i++){ $a??? = 10; #←ここがわかりません。 } #================================= どなたかご存知の方、ご教授ください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • Mathematicaで漸化式を解く方法

    Mathematicaで3変数の漸化式を解く方法を知りたいと思っています。 解きたい漸化式は、「 (j-k)*a(i,j,k) + k*a(i,j,k+1) + (i-j)*a(i,j-1,k)=0 」で与えられており、この漸化式を j を変数として解き、一般項 a(i,j,k) を i と k の式で表したいと考えています。 また、その初期値として、j=i-1のときの値、「 a(i,i-1,k)=(-1)^(k-1)*binomial(i,k)/i 」が与えられています。 (ただし、a(i,j,k)は3変数i,j,kの数列とし、*はかけ算を表し、binomial(i,k)は二項係数iCkを表すとします。) Mathematicaで、このような式を解くときに、どのように入力すればよいのかよくわかっておりません。 もしもご存じの方がおられれば、お教え頂けないでしょうか?

  • 配列変数に変換

    $a=123という値が入ってきた場合@A=(1,2,3)、 $a=1234の場合@A=(1,2,3,4)という配列変数にしたいと思います。 どのように記述すれば良いのでしょうか?

    • ベストアンサー
    • Perl