这个数学分裂函数中尖符号的含义



我在理解Mathematica中的尖锐符号时遇到了一些问题。我将# &理解为变量的占位符。但是,在下面的代码中如何理解#1#2呢?

x = {0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1};
Split[x, #1 =!= 0 && #2 =!= 0 &]

这里有什么#1#2?这些行的输出为

{{0}, {1, 1, 1}, {0}, {0}, {1, 1, 1}, {0}, {0}, {1}}

该版本的 Split 的形式为Split[list,test],其中test是一个接受两个变量的函数。所以

#1 =!= 0 && #2 =!= 0 &

是双变量纯函数的简写,其中#1#2是变量名称。


通常,Split将获取一个列表并返回分区为连续运行的"相同"元素的相同列表。因此,如果您的列表是list={0,0,2,2,3,4,4,5,5,5,7},那么Split[list]产生

{{0,0}, {2,2}, {3}, {4,4}, {5,5,5}, {7}}

但也许你想定义两件事"相同"不同的含义。这就是通用Split[list,test]功能的用武之地。这里的test函数是一个函数,它接受两个参数,如果它们相同,则返回 true;test函数是测试是否或两个事物是否相同。例如,您给出的测试函数

#1 =!= 0 && #2 =!= 0 &

如果两个元素都为非零,则返回 true。因此,您的Split函数对元素进行分组,如果它们是零的运行,或者它们是非零的运行。

再举一个例子,假设你想说两个整数是相同的,如果它们具有相同的奇偶校验(偶数或奇数)。那么你的拆分函数将是

Split[list, Mod[#1,2] == Mod[#2,2]]

对于我定义的列表将返回

{{0,0,2,2}, {3}, {4,4}, {5,5,5,7}}

相关内容

  • 没有找到相关文章

最新更新