【问题标题】:How to define selection using index function in J如何在 J 中使用索引函数定义选择
【发布时间】:2021-12-09 20:30:33
【问题描述】:

假设我有以下张量 t:

   ]m=: 100 + 4 4 $ i.16
100 101 102 103
104 105 106 107
108 109 110 111
112 113 114 115
   ]t=: (m ,: m+100) , m+200
100 101 102 103
104 105 106 107
108 109 110 111
112 113 114 115

200 201 202 203
204 205 206 207
208 209 210 211
212 213 214 215

300 301 302 303
304 305 306 307
308 309 310 311
312 313 314 315

我想选择它的对角平面,所以:

100 105 110 115

200 205 210 215

300 305 310 315

如何定义作用于索引的函数? (这里有任何平面索引让我们选择 ix(row) = ix (column))另外,如何定义一起处理值和索引的函数?所以我会对这样的东西感兴趣:

(f t) { t

谢谢!

【问题讨论】:

    标签: j


    【解决方案1】:

    您可以使用(#:i.)@$ m 将值数组转换为其对应的索引数组

    要获得f“一起处理值和索引”的示例,您可以将其插入为一个二元组,该二元组在左侧获取值,在右侧获取索引:

      f=.(2|[) +. ([:=/"1]) NB. odd value or diagonal index
      ]r=.([ f (#:i.)@$) m  NB. values f indices
    1 1 0 1
    0 1 0 1
    0 1 1 1
    0 1 0 1
      r #&, m               NB. flatten lists & get values where bit is set
    100 101 103 105 107 109 110 111 113 115
    

    一切都包裹在一个可以应用的副词中f

      sel=.1 : '#~&, [ u (#:i.)@$`
      f sel m
    100 101 103 105 107 109 110 111 113 115
    

    【讨论】:

      【解决方案2】:

      Transpose x|:y 带盒装参数将轴一起运行以生成单个轴。您可以使用它来生成一个相当惯用的解决方案:

      (< 0 1) |: m
      100 105 110 115
      
      (<0 1) |:"2 t
      100 105 110 115
      200 205 210 215
      300 305 310 315
      

      您使用 rank " 动词将对角线选择应用于 2 框。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-21
        • 2023-04-05
        • 1970-01-01
        • 2021-12-15
        • 1970-01-01
        • 2016-11-08
        • 1970-01-01
        相关资源
        最近更新 更多