0

2 つのサブ質問に分けることができる質問があります。以下にコードを示すテーブルを作成しました。

問題1。

xstep = 1;
xmaximum = 6;
numberofxnodes = 6;
numberofynodes = 3;
numberofzlayers = 3;
maximumgridnodes = numberofxnodes*numberofynodes
mnodes = numberofxnodes*numberofynodes*numberofzlayers;
orginaltable = 
   Table[{i, 
          node2 = i + xstep, node3 = node2 + xmaximum,
          node4 = node3 - xstep,node5 = i + maximumgridnodes,
          node6 = node5 + xstep,node7 = node6 + xmaximum,
          node8 = node7 - xstep}, 
        {i, 1, mnodes}]

これを実行すると、元のテーブルが取得されます。基本的に、元のテーブルから 6 番目の要素と 6 番目の要素の倍数を削除したいと考えています。以下のコードを使用してこれを行うことができます。

 modifiedtable = Drop[orginaltable, {6, mnodes, 6}]

これで、元のテーブルの 6 番目ごとの要素と 6 番目の要素の倍数が削除された、変更されたテーブルが得られます。これは私の問題1を解決します。

今私の問題2:

** 主要な編集バージョン**:(上記のコードはすべて正しい)

回答ありがとうございますが、私は何か他のものが欲しかったのですが、最初に説明したときに間違いを犯したので、もう一度試してみます.

以下は私の変更されたテーブルです: "/** と **/" の間の要素を削除してそこに残したいです。

{{1, 2, 8, 7, 19, 20, 26, 25}, {2, 3, 9, 8, 20, 21, 27, 26}, {3, 4,10, 9, 21, 22, 28, 27}, {4, 5, 11, 10, 22, 23, 29, 28}, {5, 6, 12, 11, 23, 24, 30, 29}, {7, 8, 14, 13, 25, 26, 32, 31}, {8, 9, 15, 14, 26, 27, 33, 32}, {9, 10, 16, 15, 27, 28, 34, 33}, {10, 11, 17, 16, 28, 29, 35, 34}, {11, 12, 18, 17, 29, 30, 36, 35}, /**{13, 14, 20, 19, 31, 32, 38, 37 }、{14、15、21、20、32、33、39、38}、{15、16、22、21、33、34、40、39}、{16、17、23、22、34、35 , 41, 40}, {17, 18, 24, 23, 35, 36, 42, 41},**/ {19, 20, 26, 25, 37, 38, 44, 43}, {20, 21, 27, 26, 38, 39, 45, 44}, {21, 22, 28, 27, 39, 40, 46, 45}, {22, 23, 29, 28, 40, 41, 47, 46}, { 23, 24, 30, 29, 41, 42, 48, 47}, {25, 26, 32, 31,43, 44, 50, 49}, {26, 27, 33, 32, 44, 45, 51, 50}、{27、28、34、33、45、46、52、51}、{28、29、35、34、46、47、53、52}、{29、30、36、35、47、 48, 54, 53}, /**{31, 32, 38, 37, 49,50, 56, 55}, {32, 33, 39, 38,50, 51, 57, 56}, {33, 34, 40, 39, 51, 52, 58, 57}, {34, 35, 41, 40, 52, 53, 59, 58}, {35, 36, 42, 41, 53, 54, 60, 59},**/ {37, 38, 44, 43,55, 56, 62, 61}, {38, 39, 45, 44, 56, 57, 63, 62}, {39, 40, 46, 45, 57, 58, 64, 63}, {40, 41, 47, 46, 58, 59, 65 , 64}, {41, 42, 48, 47,59, 60, 66, 65}, {43, 44, 50, 49, 61, 62, 68, 67}, {44, 45, 51, 50, 62 , 63, 69, 68}, {45, 46, 52, 51, 63, 64, 70, 69}, {46, 47, 53, 52, 64, 65, 71, 70}, {47, 48, 54 , 53, 65, 66, 72, 71}, /**{49, 50, 56, 55, 67, 68, 74, 73}, {50, 51, 57, 56, 68, 69, 75, 74} ,{51,52, 58, 57, 69, 70, 76, 75}, {52, 53, 59, 58, 70, 71, 77, 76}, {53, 54, 60, 59, 71, 72, 78, 77}}**/44, 56, 57, 63, 62}, {39, 40, 46, 45, 57, 58, 64, 63}, {40, 41, 47, 46, 58, 59, 65, 64}, {41, 42, 48, 47,59, 60, 66, 65}, {43, 44, 50, 49, 61, 62, 68, 67}, {44, 45, 51, 50, 62, 63, 69, 68} 、{45、46、52、51、63、64、70、69}、{46、47、53、52、64、65、71、70}、{47、48、54、53、65、66、 72, 71}, /**{49, 50, 56, 55, 67, 68, 74, 73}, {50, 51, 57, 56, 68, 69, 75, 74},{51,52, 58 , 57, 69, 70, 76, 75}, {52, 53, 59, 58, 70, 71, 77, 76}, {53, 54, 60, 59, 71, 72, 78, 77}}** /44, 56, 57, 63, 62}, {39, 40, 46, 45, 57, 58, 64, 63}, {40, 41, 47, 46, 58, 59, 65, 64}, {41, 42, 48, 47,59, 60, 66, 65}, {43, 44, 50, 49, 61, 62, 68, 67}, {44, 45, 51, 50, 62, 63, 69, 68} 、{45、46、52、51、63、64、70、69}、{46、47、53、52、64、65、71、70}、{47、48、54、53、65、66、 72, 71}, /**{49, 50, 56, 55, 67, 68, 74, 73}, {50, 51, 57, 56, 68, 69, 75, 74},{51,52, 58 , 57, 69, 70, 76, 75}, {52, 53, 59, 58, 70, 71, 77, 76}, {53, 54, 60, 59, 71, 72, 78, 77}}** /{52, 53, 59, 58, 70, 71, 77, 76}, {53, 54, 60, 59, 71, 72, 78, 77}}**/{52, 53, 59, 58, 70, 71, 77, 76}, {53, 54, 60, 59, 71, 72, 78, 77}}**/

さて、ご覧のとおり、最初の 10 個の要素 ( の 1 番目から 10 番目の要素modifiedtable) を最終テーブル ( DoubleModifiedTable) に含める必要がありました。次の 5 つ ( の 11 番目から 15 番目の要素modifiedtable) が削除されました。次に、次の 10 個の要素 ( の 16 番目から 25 番目の要素modifiedtable) が最終的なテーブルに存在し ( DoubleModifiedTable)、次の 5 つの要素 ( の 26 番目から 30 番目の要素modifiedtable) が削除され、テーブル全体で同様に削除されます。

この問題を解決し、 final table という名前を付けたとしましょうDoubleModifiedTable

私は基本的に を取得することに興味がありDoubleModifiedTableます。説明が簡単なので、問題を細分化することにしました。

これは単なるテーブルの例ですが、実際には巨大なテーブルがあるため、テーブルを介してこれを自動的に実行したいと考えています。このテーブルでこの問題を解決する方法を理解できれば、大きなテーブルでも解決できます。

4

3 に答える 3

4

おそらくもっと簡単です:

DoubleModifiedTable = 
  Module[{copy  = modifiedtable},
  copy[[Flatten[# + Range[5] & /@ Range[10, Length[copy], 10]]]] = Sequence[];
  copy]

編集

さらに簡単:

DoubleModifiedTable =
   Delete[modifiedtable,
     Transpose[{Flatten[# + Range[5] & /@ Range[10, Length[modifiedtable], 10]]}]]

編集2

OPのリクエストによると、修正された問題の答えを得るために、私のソリューションのいずれかで単一の数字(10から15)を変更するだけで済みます:

DoubleModifiedTable =
  Delete[modifiedtable,
    Transpose[{Flatten[# + Range[5] & /@ Range[10, Length[modifiedtable], 15]]}]]
于 2011-09-02T21:42:44.467 に答える
3

別の方法は、次のようなことをすることです

DoubleModifiedTable = With[{n = 10, m = 5},
  Flatten[{{modifiedtable[[;; m]]}, 
    Partition[modifiedtable, n - m, n, {n - m + 1, 1}, {}]}, 2]]

編集

問題 2 の編集されたバージョンは、実際には元のバージョンよりも解決が少し簡単です。たとえば、次のようなことができます

DoubleModifiedTable = 
 With[{n = 10, m = 5}, Flatten[Partition[modifiedtable, n, n + m, 1, {}], 1]] 

編集 2

私の 2 番目のバージョンでは、modifiedtableを使用して元のリストをサブリストに分割し、Partitionこれらのサブリストを平坦化して最終的なリストを形成します。パーティションのドキュメントを見ると、6 番目の形式を使用していることがわかりますPartition。つまり、サブリストの長さはnで、オフセット (距離 be はn+mです。したがって、サブリスト間のギャップは ですn+m-n==m

次の引数 は、 の最初の要素が最初のサブリストの位置 1 に出現し、 の最後の要素が最後のサブリストの位置 1 以降に出現することを Mathematica に指示1する と実際には同等です。{1,1}modifiedtablemodifiedtable

最後の引数{}は、 length のサブリストにパディングを使用しないことを示します<=n

n=5要約すると、最初の 10 要素を削除して次の 5 要素を保持する場合は、長さが gapのサブリストが必要ですm=10。最初のサブリストを の(m+1)番目の要素で開始する必要があるため、 の 4 番目の引数をの値の形式のものにmodifiedtable置き換えることができますが、 の最初の要素を事前に削除する方がおそらく簡単です。Partition{k,1}kmmodifiedtable

DoubleModifiedTable = 
 With[{n = 5, m = 10}, 
  Flatten[Partition[Drop[modifiedtable, m], n, n + m, 1, {}], 1]]
于 2011-09-02T21:10:58.823 に答える
1
DoubleModifiedTable=
modifiedtable[[
  Complement[
   Range[Length[modifiedtable]],
   Flatten@Table[10 i + j, {i, Floor[Length[modifiedtable]/10]}, {j, 5}]
  ]
]]

または、少し短い

DoubleModifiedTable=
#[[
    Complement[
       Range[Length[#]],
       Flatten@Table[10 i + j, {i, Floor[Length[#]/10]}, {j, 5}]
     ]
 ]] & @ modifiedtable
于 2011-09-02T21:00:32.397 に答える