Как показать матрицу символов в Mathematica - PullRequest
3 голосов
/ 28 января 2012

У меня есть список, такой как { {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.И все оставшиеся позиции в сетке отображаются пустыми.

Пожалуйста, помогите мне.

Ответы [ 2 ]

6 голосов
/ 28 января 2012

SparseArray настроен для этого.Здесь также используется @@@, что сокращенно для Apply на уровне 1:

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, чтобы его размер соответствовал самой дальней точке ваших данных.Третий (необязательный) аргумент - это выражение для использования в качестве «фона» массива.Здесь я использую пустую строку "", чтобы удовлетворить ваш запрос "blank".Поскольку это становится трудно читать, вы можете предпочесть линии сетки:

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

Mathematica graphics

3 голосов
/ 28 января 2012

Мистер Wizard ответ является оптимальным.Но просто для удовольствия, вот немного другой способ использования чистой функции

Grid[SparseArray[ #[[1]] -> #[[2]] & /@ dat, {5, 5}, ""], Frame -> All]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...