SparseArray 不会替换传递给函数的变量

问题描述 投票:0回答:1

这里是 Mathematica 13 中的一些有问题的代码:

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}}

嗨, 第一行按预期工作。 由于某些原因,第 [134] 行没有按我的预期工作...我希望在第 136 行中得到 {{1}}。非常令人困惑。 为什么 SparseArray 在调用时不替换函数参数的值? 谢谢你, 谢尔盖

wolfram-mathematica sparse-matrix
1个回答
0
投票

可能是

SparseArray
范围中的错误。如果您查看其向下值,
d
就在那里,但它没有接收输入
d

Clear[M]

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

DownValues[M] // InputForm
{HoldPattern[M[d]] :> SparseArray[Automatic,{1,1},0,{1,{{0,1,{{1}}},{d}}]}
M[1] // Normal
{{d}}

如果你用比较正统的

SetDelayed
(:=)就没问题了

Clear[M]

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

DownValues[M] // InputForm
{HoldPattern[M[d]] :> SparseArray[{1, 1} -> d]}
M[1] // Normal
{{1}}
© www.soinside.com 2019 - 2024. All rights reserved.