level 1
在折腾这个复杂矩阵的时候,总觉得Map和/@的写法完全不一样,但看文档,/@应该就是map的简写而已,不应该有区别吧?
最上面是矩阵的表达式形式,第二个是矩阵形式,目的就是最终变成第三个矩阵的格式。显然就是用Flatten来进行。如果写成这样:(设矩阵的名字是mat1)
Map[Flatten,Flatten[mat1,1],{2}]
那么结果无误。
但我想用/@来简写,却始终是错误的结果,比如写成这样:
Flatten[#,{2}]&/@Flatten[mat1,1]
得出的矩阵格式就不对了。
2022年06月27日 13点06分
1
level 1
截图没能贴上来
我感觉/@似乎不能应用在函数有两个参数的情况下,如果映射的函数只有1个参数,那么就没有问题
2022年06月27日 14点06分
2
多元函数需MapThread等
2022年06月27日 14点06分
吧务
level 10
你的两端代码显然不等价
Map[Flatten,Flatten[mat1,1],{2}]
Flatten[#,{2}]&/@Flatten[mat1,1]
第一条代码你Map了一个Flatten到第二层,第二条你Map了一个Flatten[#,{2}]&到第一层。这不一样很正常。
2022年06月27日 14点06分
3
吧务
level 10
总之原则上,f/@x与Map[f,x]没有区别。如果有,多半你写错了。
2022年06月27日 14点06分
4
多谢指教,明白了,像这种情况,两次Flatten都有两个参数,那么最好还是写成标准的Map形式,用/@炫技的写法反而把逻辑搞混了。
2022年06月28日 09点06分
吧务
level 15
……
Flatten[#,{2}]&/@Flatten[mat1,1]
等效于
Map[Flatten[#,{2}]&, Flatten[mat1,1]]
等效于
Map[Flatten[#,{2}]&, Flatten[mat1,1], {1}]
你为啥会觉得它等效于
Map[Flatten,Flatten[mat1,1],{2}]
?是觉得 {2} 这个参数可以随便乱挪吗?想想Flatten的功能是啥也该知道这不大可能吧?
顺便,Flatten[…,{2}]涉及Flatten的一个高级语法,想了解可以看看精品区《谁给我讲讲Flatten的第四种语法(即ArrayFlatten的第一种语法)》,看不明白就先别管,不必灰心。
2022年07月02日 05点07分
5