You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

J语言中如何对选择器进行取反操作

问题解答

1. 选择器整体取反的实现方法

可以实现,你可以基于现有选择器构造补集索引,代码示例如下:
首先定义测试矩阵和你原来的选择器:

rarg=. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
mat =. 4 4 $ rarg
orig_sel =. <(<0 1),(<0 1)  NB. 你原有要取反的选择器

对选择器整体取反(选中所有不在orig_sel范围内的位置)的写法如下:

_1 (] -.@:e.&,/orig_sel)@:#:"0@i.@$ } mat

运行结果和你预期的完全一致:

0  1 _1 _1
 4  5 _1 _1
_1 _1 _1 _1
_1 _1 _1 _1

该写法适配任意维度的矩阵,不需要硬编码行列数,只要修改orig_sel里的行列选择范围就可以通用。

2. 替换为自定义值的方法

直接替换语句最左侧的_1为你需要的自定义内容即可:

  • 如果是统一替换为单个值,比如替换为99:
99 (] -.@:e.&,/orig_sel)@:#:"0@i.@$ } mat
  • 如果需要给替换区域配置不同的自定义块,只要构造和替换区域维度匹配的数组作为左参数即可,比如要把替换区域的右上角2×2块改为10 20/30 40,下方2行全部改为0:
replace_val =. (2 2 $ 10 20 30 40) , (2 4 $ 0)
replace_val (] -.@:e.&,/orig_sel)@:#:"0@i.@$ } mat

内容的提问来源于stack exchange,提问作者paweljakubas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 21:24:07