获得现在未知符号的维度的最佳方法。
例如:
foo = Dimensions[undefined][[1,1]];
foo /.undefined -> {{1,2},{3,4}}
这些代码行不起作用。有谁知道,如何正确写这个? 我必须通过替换导入值。 '富'作为一个功能和' a'遗憾的是,作为一个参数我无法替代。
答案 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网站: