替代符号的尺寸

时间:2014-10-13 09:43:41

标签: wolfram-mathematica

获得现在未知符号的维度的最佳方法。

例如:

foo = Dimensions[undefined][[1,1]];
foo /.undefined -> {{1,2},{3,4}}

这些代码行不起作用。有谁知道,如何正确写这个? 我必须通过替换导入值。 '富'作为一个功能和' a'遗憾的是,作为一个参数我无法替代。

2 个答案:

答案 0 :(得分:1)

我发现了一种可能性:

需要包装'Dimensions'

dim[x_?MatrixQ] := Dimensions[x];
...
foo = dim[undefined][[1,1]];
foo /.undefined -> {{1,2},{3,4}}

这有效!

答案 1 :(得分:1)

你的自我回答中有正确的想法,我投了赞成票。但是,您应该知道MatrixQ并不像您想要的那样通用。例如,三维张量将失败:

tensor = RandomInteger[9, {3, 2, 4}];

MatrixQ[tensor]
False

Dimensions可用于甚至不是List的表达式:

f[f[1, 2], f[3, 3]] // Dimensions
{2, 2}

此外,您对Part的使用不正确。请注意警告消息:

dim[undefined][[1, 1]]
  

在评估In [106]期间:= Part :: partd:部件规范dim [undefined] [[1,1]]比对象的深度长。 >>

 dim[undefined][[1, 1]]

Dimensions的输出中没有任何部分(1,1)。如果您改为使用[[1]],则只需从undefined中提取dim[undefined]即可。相反,您应该在dim的定义中包含零件提取,或者如果您有 Mathematica 10+,则可以使用Indexed

我建议:

dims[x : _[__], part__: All] := Dimensions[x][[part]]

现在:

dims[undefined] /. undefined -> tensor
{3, 2, 4}
dims[undefined, 1] /. undefined -> tensor
3
 dims[undefined, 2] /. undefined -> f[f[1, 2], f[3, 3]]
2

访问专用的 Mathematica Stack Exchange网站:

Mathematica.StackExchange