1、首先,Mathematica中常见的输入单个数据的数学运算函数,基本上都可以对列表进行批量计算,效果如下:S鳎溻趄酃qrt,+,-,*,/,Sin,Cos,Tan等等都是可以的。这样的计算将会分别对列表中的每个元素,或者对应元素进行。
2、对于多层列表,这些函数可以作用到每个层次。效果如图。
3、直接使用列表进行计算要注意,如果是双目运算,比如+,-,*,/等,两个列表必须有相同的结构。如下图,两个列表结构不同无法合并。
4、对于不带有Listable属性的函数,比如Norm求模函数(它会把列表当成向量,把二重列表当成矩阵),上面的用法失效。如下,我们尝试对一个向量列表求每个向量的模,然而Norm会视之为矩阵。
5、首先说较为一般的办法,就是使用Table函数。如下,使用下表[[i]]访问列表项,使用Length计算列表长度,使用Table进行批量计算。
6、接着,我们介绍一个非常有用的函数:MapTh筠续师诈read。用法是:MapThread[函数名, {被作用的列表1, 被作用的列表2,...魈胺闹臣}, 保留的层次数]如下,我们使用Norm函数,作用于list列表,保留一层也就是把{1,2,3}这种视为一个整体,同时计算列表元素。
7、与Table函数相比较,MapThread函数性能稍有优势,且写法更加简洁。
8、对于带有Listable属性的函数,我们测试速度如下。可见,直接使用Listable函数与间接使用MapThread的性能不相上下。