我有两个向量(比如X和Y),它们对应于行号和列号。我想写一个函数(一个动词,在j编程中),它接受这些并在n x n零矩阵中赋值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,:)中的这样)。我该如何克服这个问题呢?
答案 0 :(得分: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
如果我理解了你的问题,那就是你想要制作的矩阵。