v=: ((1 2);(3 4);(0 5);(2 1))
diff=: ([{]) ,. ]
direction_vector=: <"1 @: (-"0 @:(-/"2 @: (>"0 @: (diff))))
distance=: +/"1 @: *: @: (>"2 @:(direction_vector))
我想得到一个看起来像
的相异矩阵(0 distance v),. (1 distance v),. (2 distance v) ,. (3 distance v)
我试过
i.4 distance v
给了我一个索引错误
任何人都可以帮我这个吗?
谢谢!
答案 0 :(得分:3)
你很接近,但你有两个问题要处理。一个是你想在应用距离之前完成i. 4
的计算(这就是你得到索引错误的原因)。更改计算顺序的括号是解决此问题的方法。
i. 4 distance v
|index error: diff
| i.4 distance v
(i. 4) distance v
0 0 0 0
第二个问题是,您希望将i.4
的每个原子应用于整个v
,并使用"
(排名)来指定0
左边参数的(atoms)和整个右边参数的_
(无穷大)。
(i. 4) distance"0 _ v
0 8 10 2
8 0 10 10
10 10 0 20
2 10 20 0