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

为何Mathematica中SparseArray不替换函数传入的变量?

Mathematica中SparseArray定义函数时参数不替换的问题分析

先复现你遇到的异常代码:

In[132]:= M[d_] = Normal[SparseArray[{1, 1} -> d]]

Out[132]= {{d}}

In[133]:= M[1]

Out[133]= {{1}}

In[134]:= M[d_] = SparseArray[{1, 1} -> d]

Out[134]= {0}[{d}]

In[136]:= M[1] // Normal

Out[136]= {{d}}

问题原因

这是Mathematica中SparseArray的延迟求值特性导致的:

  • 第一个定义里,Normal会立即触发SparseArray的求值过程,把函数参数d和规则里的d绑定,调用M[1]时能正常替换参数值。
  • 直接赋值SparseArray时,Mathematica不会立即求值SparseArray内部的规则,只是把SparseArray[{1, 1} -> d]作为带模式的表达式存储。当调用M[1]时,仅完成了函数头部d_与1的匹配,但SparseArray内部的d仍是未被替换的原始符号,所以执行Normal后得到的还是{{d}}。

解决方法

用Evaluate强制SparseArray在定义时完成参数绑定:

M[d_] = Evaluate[SparseArray[{1, 1} -> d]]

此时调用M[1] // Normal就能得到预期的{{1}}。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 01:42:36