我有一个我在1985年写的J程序(在vax vms上).一节是从矢量创建对角矩阵.
a=(n,n)R1,nR0
b=In
a=bXa
Run Code Online (Sandbox Code Playgroud)
也许它不是J而是ascii中的APL,但这些行在当前的J中起作用(在原始函数中有适当的变化).但不是APL(gnu,NARS2000或ELI).我在最后一行收到域错误.有没有循环的简单方法吗?
您的代码是APL的ASCII音译.相应的J代码是:
a=.(n,n)$1,n$0
b=.i.n
a=.b*a
Run Code Online (Sandbox Code Playgroud)
在线尝试!然而,没有APL(截至目前 - 它被考虑用于Dyalog APL)具有最后一行所需的主要细胞扩增.因此,您需要指定向量的标量b
应a
使用括号轴表示法与矩阵的行相乘:
a?(n,n)?1,n?0
b??n
a?b×[1]a
Run Code Online (Sandbox Code Playgroud)
在线尝试!或者,您可以使用排名运算符(如果可用):
a?(n,n)?1,n?0
b??n
a?b(×?0 1)a
Run Code Online (Sandbox Code Playgroud)