簡體   English   中英

用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

}不能很好地解決這個問題。

這個問題的最簡單答案是使用dyadic >. 較大 )...

   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

如果您的問題是關於散布索引替換的,那么這也是可能的。 您需要獲取要替換位置的2D索引,例如:

   4 $. $. 0 > y2
0 0
0 1
0 2

現在將這些索引裝箱並使用dyadic }

   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)的gerund left參數將其變成動詞,如下所示:

   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

這不是一個好的解決方案。 我最初的方法是更改​​測試的排名,以便分別查看每一行,但這在一般情況下不起作用(請參閱下面的評論)。

 [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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM