通过附加函数的多个输出来得到相异矩阵

Dissimilarity Matrix by appending several outputs from a function

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

这给了我一个索引错误

任何人都可以帮助我吗?

谢谢!

你很接近,但你有两个问题要处理。一个是你想在应用距离之前完成 i. 4 的计算(这就是你得到索引错误的原因)。括号改变计算顺序是解决这个问题的方法。

   i. 4 distance v
|index error: diff
|   i.4     distance v
   (i. 4) distance v
0 0 0 0

第二个问题是您想将 i.4 的每个原子应用到整个 v 并且您通过使用 " (等级)来指定 [=16] =](原子)用于左侧参数,_(无穷大)用于整个右侧参数。

   (i. 4) distance"0 _ v
 0  8 10  2
 8  0 10 10
10 10  0 20
 2 10 20  0