如何在Mathematica中显示字符矩阵

3
我有一个列表,例如 { {1 ,1 }, "Q"}, { {2 ,3 }, "E"}, { {3 ,5 }, "Q"}, { {4 ,2 }, "Q"}, { {5 ,4 }, "Q"}, { {1 ,5 }, "E"},我需要将字符显示在一个矩形网格中,例如,在这种情况下,5*5 网格上,在 (1, 1) 上有一个字符 Q,在 (2, 3) 上有一个字母 Q,...,在 (1, 5) 上有一个字母 E。并且网格中的所有其余位置都显示为空白。

请帮助我。


有一个新的[mathematica.se]网站,你可能会感兴趣。 - rcollyer
2个回答

6

SparseArray可以实现这个功能。同时也使用了@@@,它是Apply在第一层级的简写:

dat =
{{{1, 1}, "Q"},
 {{2, 3}, "E"},
 {{3, 5}, "Q"},
 {{4, 2}, "Q"},
 {{5, 4}, "Q"},
 {{1, 5}, "E"}};

SparseArray[Rule @@@ dat, {5, 5}, ""] // MatrixForm

Mathematica graphics

SparseArray的第二个参数(此处为{5, 5})是显式数组大小。您可以使用Automatic让它根据数据的最远点自动设置大小。第三个(可选)参数是用作数组“背景”的表达式。在这里,我使用空字符串""来满足您对“空白”的要求。由于这会变得难以阅读,您可能更喜欢网格线:

Grid[
 SparseArray[Rule @@@ dat, {5, 5}, ""],
 Frame -> All
]

Mathematica graphics


我想要把矩阵中的0去掉!谢谢! - user1096734

3

Mr Wizard提供的答案是最优解。但是为了好玩,这里提供一种使用纯函数的略微不同的方法。

Grid[SparseArray[ #[[1]] -> #[[2]] & /@ dat, {5, 5}, ""], Frame -> All]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接