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

如何在KDB中生成对角线为1其余元素为0.5的矩阵?

矩阵生成最优实现方案

你原来的自定义函数逻辑本身没问题,问题出在传参方式不符合q语言的迭代规则:shrinkfn需要同时接收行索引、列索引两个入参,你参考的单位矩阵写法{x=/:x}@til 4内部的x是完整的索引列表,没法直接给双参数函数传对应位置的两个索引值。

两种可直接运行的实现方案如下:

  • 方案1:逐元素判断(适合小规模矩阵)
    直接用双层迭代把行、列索引逐个传入自定义函数判断即可:
shrinkfn: {$[x=y;1;0.5]}
shrinkfn'[til 4;]/:til 4

如果不需要复用函数,也可以直接写为一行:
{$[x=y;1;0.5]}'[til 4;]/:til 4

  • 方案2:批量修改(性能最优,适合所有规模矩阵)
    该方案跳过逐元素条件判断,先生成全量0.5矩阵,再批量修改对角线元素,矩阵阶数越大性能优势越明显,是该需求的最优选择:
n:4 / 可替换为任意你需要的矩阵阶数
res:(n,n)#0.5 / 生成n阶全0.5矩阵
@[res; (til n;til n); :; 1f] / 批量将对角线位置赋值为1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:30:03