我有一个问题,可以分为两个子问题。 我创建了一个表,其代码如下所示。
问题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}]
如果我跑这个,我会得到我原来的桌子。基本上我想从原始表中删除第六个元素和第六个元素的倍数。我可以使用下面的代码来完成此操作。
modifiedtable = Drop[orginaltable, {6, mnodes, 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,45,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}} ** /
现在,如果你观察,我想要前十个元素
(modifiedtable
的第1到第10个元素)在我的决赛桌中
(DoubleModifiedTable
)。删除了接下来的五个(modifiedtable
的第11个到第15个元素)。
接下来的十个元素(modifiedtable
的第16到第25个元素)
出现在我的决赛桌(DoubleModifiedTable
)
接下来的五个被删除(modifiedtable
的第26到第30个元素),等等整个表格。
假设我们解决了这个问题,并将最终表格命名为DoubleModifiedTable
。
我基本上对获得DoubleModifiedTable
感兴趣。我决定将问题细分为易于解释。
我希望这通过表自动发生,因为这只是一个示例表,但实际上我有很大的表。如果我能理解如何为这个表解决这个问题,那么我也可以为我的大表解决它。
答案 0 :(得分: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]]}]]
答案 1 :(得分: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
我的第二个版本的作用是使用modifiedtable
将原始列表Partition
拆分为子列表,然后展平这些子列表以形成最终列表。如果您查看Documentation for Partition,您可以看到我使用的是Partition
的第6种形式,这意味着子列表的长度为n
,偏移量(距离为{ {1}}。因此,子列表之间的差距为n+m
。
下一个参数n+m-n==m
实际上等同于1
,它告诉Mathematica {1,1}
的第一个元素应该出现在第一个子列表中的第一个位置和{的最后一个元素{1}}应出现在最后一个子列表的第1位或之后。
最后一个参数modifiedtable
表示不应将填充用于长度为modifiedtable
的子列表。
总之,如果您要删除前10个元素并保留接下来的5个元素,则需要长度为{}
且间距为<=n
的子列表。由于您希望第一个子列表以n=5
的{{1}}元素开头,因此可以将m=10
中的第四个参数替换为(m+1)
形式的某个值modifiedtable
的{{1}},但事先删除Partition
的第一个{k,1}
元素可能更容易,即
k
答案 2 :(得分: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