Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wolfram mathematica 从Mathematica中的列表中选择非顺序元素_Wolfram Mathematica - Fatal编程技术网

Wolfram mathematica 从Mathematica中的列表中选择非顺序元素

Wolfram mathematica 从Mathematica中的列表中选择非顺序元素,wolfram-mathematica,Wolfram Mathematica,我经常将电子表格导入Mathematica进行分析,但在编写选择非顺序元素进行分析的简单方法时遇到困难。例如,如果导入一个包含20列和100行的电子表格,通常需要删除选定的行/列 在这个例子中,我需要所有的行和列2,4,7-17。以下代码应该可以正常工作,但会导致错误: v[[ All, {2,4,7;;17} ]] 相反,我一直在使用: v[[ All, {2,4,7,8,9,10,11,12,13,14,15,16,17} ]] 在我的示例中,在选择第2行和第4行的同时,是否可以使用Sp

我经常将电子表格导入Mathematica进行分析,但在编写选择非顺序元素进行分析的简单方法时遇到困难。例如,如果导入一个包含20列和100行的电子表格,通常需要删除选定的行/列

在这个例子中,我需要所有的行和列2,4,7-17。以下代码应该可以正常工作,但会导致错误:

v[[ All, {2,4,7;;17} ]]
相反,我一直在使用:

v[[ All, {2,4,7,8,9,10,11,12,13,14,15,16,17} ]]

在我的示例中,在选择第2行和第4行的同时,是否可以使用Span(;;)选择一个列块(7-17)?

x;;y语法是Part的一个特殊参数,而不是可用于构建列表的通用语法。所以你可以说v[[All,7;;17]],但不能说v[[All,{7;;17}]]——后者既不是一个整数列表,也不是一种可以部分识别的特殊语法

但是解决你的问题很容易。您可以尝试:

v[[All, {2,4}~Join~Table[x,{x,7,17}] ]]
例如,或者

Join[v[[All, {2, 4}]], v[[All, 7 ;; 17]], 2]

祝你好运

这是
零件和
Span
的已知限制。请看我自己密切相关的问题:

您的解决方案是最常见的解决方案。如果您发现构建索引列表太不方便,可以尝试使用自定义零件函数使其更容易。例如:

SetAttributes[part, HoldFirst]

part[x_, parts__] := x[[##]] & @@ Flatten /@ ({parts} /. Span -> Range)
使用:

这不需要尝试处理负指数跨度,因为负指数跨度会非常复杂,但至少可以给您一些想法。

另一种方法

pys[{all___}] := 
 Flatten[(Switch[Head[#], Span, 
      Range @@ (# /. Span -> List), __, #]) & /@ {all}] 
list = Range[100];
list[[pys[{1, 3 ;; 12 ;; 2, 19, -3 ;; -1}] ]]

{1, 3, 5, 7, 9, 11, 19, 98, 99, 100}

这显然不处理开口端{1,3;;}或混合+/-跨距{5;;-5}

我想你的意思是“同时选择第2列和第4列”是的,我指的是列。对不起,我弄错了。谢谢。这很有帮助
{{1, 3, 4}, {5, 7, 8}, {9, 11, 12}, {21, 23, 24}}
pys[{all___}] := 
 Flatten[(Switch[Head[#], Span, 
      Range @@ (# /. Span -> List), __, #]) & /@ {all}] 
list = Range[100];
list[[pys[{1, 3 ;; 12 ;; 2, 19, -3 ;; -1}] ]]

{1, 3, 5, 7, 9, 11, 19, 98, 99, 100}