用 J 动词 `I.` 替换数组中的项目
Replace items in an array with J verb `I.`
这是使用 I.
动词对排名 1 列表的简单替换:
y=: _3 _2 _1 1 2 3
0 (I. y<0) } y
结果是
0 0 0 1 2 3
如何替换 2 阶矩阵?
例如,
y2 =: 2 3 $ _3 _2 _1 1 2 3
0 (I. y2<0) } y2
我得到了 (J806)
|index error
| 0 (I.y2<2)}y2
原因好像是
(I. y2 < 0)
给予
0 1 2
0 0 0
}
没有很好地理解。
这不是一个好的解决方案。我最初的方法是更改测试的等级,以便它分别查看每一行,但这在一般情况下不起作用(请参阅下面的评论)。
[y2 =: 2 3 $ _3 _2 _1 1 2 3
_3 _2 _1
1 2 3
I. y2<0
0 1 2
0 0 0
0 (I. y2<0)"1 } y2 NB. Rank of 1 applies to each row of y2
0 0 0
1 2 3
这个问题最简单的答案是使用二进>.
(Larger of) ...
0 >. y2
0 0 0
1 2 3
如果你想使用更通用的条件替换标准,那么下面的表格可能会有用:
(0 > y2)} y2 ,: 0
0 0 0
1 2 3
如果你想把它当作动词,那么你可以使用动名词形式 (v1`v2)} y ↔ (v1 y)} (v2 y)
:
(0 > ])`(0 ,:~ ])} y2
0 0 0
1 2 3
如果您的问题更多是关于散点索引替换,那么这也是可能的。您需要获取要替换的位置的二维索引,例如:
4 $. $. 0 > y2
0 0
0 1
0 2
现在将这些索引框起来并使用二元 }
:
0 (<"1 (4 $. $. 0 > y2)) } y2
0 0 0
1 2 3
同样,您可以使用动名词左参数将其变成动词 }
(x (v0`v1`v2)} y ↔ (x v0 y) (x v1 y)} (x v2 y)
),如下所示:
0 [`([: (<"1) 4 $. [: $. 0 > ])`]} y2
0 0 0
1 2 3
或
100 101 102 [`([: (<"1) 4 $. [: $. 0 > ])`]} y2
100 101 102
1 2 3
为了稍微整理一下,您可以将 getIdx 定义为单独的动词...
getIdx=: 4 $. $.
0 [`([: <"1@getIdx 0 > ])`]} y2
0 0 0
1 2 3
这是使用 I.
动词对排名 1 列表的简单替换:
y=: _3 _2 _1 1 2 3
0 (I. y<0) } y
结果是
0 0 0 1 2 3
如何替换 2 阶矩阵?
例如,
y2 =: 2 3 $ _3 _2 _1 1 2 3
0 (I. y2<0) } y2
我得到了 (J806)
|index error
| 0 (I.y2<2)}y2
原因好像是
(I. y2 < 0)
给予
0 1 2
0 0 0
}
没有很好地理解。
这不是一个好的解决方案。我最初的方法是更改测试的等级,以便它分别查看每一行,但这在一般情况下不起作用(请参阅下面的评论)。
[y2 =: 2 3 $ _3 _2 _1 1 2 3
_3 _2 _1
1 2 3
I. y2<0
0 1 2
0 0 0
0 (I. y2<0)"1 } y2 NB. Rank of 1 applies to each row of y2
0 0 0
1 2 3
这个问题最简单的答案是使用二进>.
(Larger of) ...
0 >. y2
0 0 0
1 2 3
如果你想使用更通用的条件替换标准,那么下面的表格可能会有用:
(0 > y2)} y2 ,: 0
0 0 0
1 2 3
如果你想把它当作动词,那么你可以使用动名词形式 (v1`v2)} y ↔ (v1 y)} (v2 y)
:
(0 > ])`(0 ,:~ ])} y2
0 0 0
1 2 3
如果您的问题更多是关于散点索引替换,那么这也是可能的。您需要获取要替换的位置的二维索引,例如:
4 $. $. 0 > y2
0 0
0 1
0 2
现在将这些索引框起来并使用二元 }
:
0 (<"1 (4 $. $. 0 > y2)) } y2
0 0 0
1 2 3
同样,您可以使用动名词左参数将其变成动词 }
(x (v0`v1`v2)} y ↔ (x v0 y) (x v1 y)} (x v2 y)
),如下所示:
0 [`([: (<"1) 4 $. [: $. 0 > ])`]} y2
0 0 0
1 2 3
或
100 101 102 [`([: (<"1) 4 $. [: $. 0 > ])`]} y2
100 101 102
1 2 3
为了稍微整理一下,您可以将 getIdx 定义为单独的动词...
getIdx=: 4 $. $.
0 [`([: <"1@getIdx 0 > ])`]} y2
0 0 0
1 2 3