0

我有两个向量(比如 X 和 Y),它们对应于行号和列号。我想编写一个函数(一个动词,在 j 编程中),它接受这些并在 anxn 零矩阵中分配 1。这是一个简单的案例。

我有这些向量:

X=:1 2 1 5
Y=:0 3 3 9

和一个零矩阵:

mat=: 10 10$0 

我编写了以下函数(我使用了拳击):

   1(|:(,./<"0(|:(X,:Y)))) } 10 10$0

但问题是它需要这些向量并将 1 分配给每一列。因此,如果我采用 (1,0) ,它会将 1 分配给所有列中的第 1 行和第 0 行(就像在 Matlab (1,:) 中一样)。我该如何克服这个问题?

4

1 回答 1

4

我了解您想修改布尔名词以将 1 放在指定的坐标处。您从作为单独列表的坐标对开始。我建议将这些列表拼接在一起,如下所示:

   Y,.X
0 1
3 2
3 1
9 5

Y 位于 X 之前,因为在 J 中,轴自然地以递减顺序排列(也就是说,最细粒度的向右排列。)要将它们用作 Amend 的坐标对,需要将它们装箱:

   <"1 Y,.X
+---+---+---+---+
|0 1|3 2|3 1|9 5|
+---+---+---+---+

这些将与 Amend 一起在这些特定坐标处设置 1,因此:

   1 (<"1 Y,.X)} 10 10$0
0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 1 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0

如果我理解了您的问题,这就是您想要生成的矩阵。

于 2012-09-04T04:20:17.240 回答