Раньше я не использовал PackedArray, но начал изучать их, прочитав некоторые обсуждения по ним здесь сегодня.
У меня много больших 1D и 2D матриц всех реалов, и нетсимвольным (это решатель PDE с конечными разностями), и поэтому я подумал, что мне следует воспользоваться PackedArray.
У меня есть функция инициализации, в которой я размещаю все необходимые данные / сетки.Поэтому я пошел и использовал ToPackedArray
на них.Кажется, это немного быстрее, но мне нужно больше тестировать производительность, чтобы лучше сравнивать скорость до и после, а также сравнивать использование ОЗУ.
Но, глядя на это, я заметил, что некоторые операции в M автоматически возвращаютсясписки в PackedArray уже есть, а некоторые нет.
Например, этот не не возвращает упакованный массив
a = Table[RandomReal[], {5}, {5}];
Developer`PackedArrayQ[a]
Но этот делает
a = RandomReal[1, {5, 5}];
Developer`PackedArrayQ[a]
и это делает
a = Table[0, {5}, {5}];
b = ListConvolve[ {{0, 1, 0}, {1, 4, 1}, {0, 1, 1}}, a, 1];
Developer`PackedArrayQ[b]
, а также умножение матриц делает возвращает результат в упакованном массиве
a = Table[0, {5}, {5}];
b = a.a;
Developer`PackedArrayQ[b]
Но поэлементное умножение не
b = a*a;
Developer`PackedArrayQ[b]
Мой вопрос: есть ли где-нибудь список, в котором указано, какие М-команды возвращают PackedArray, а не нет?(при условии, что данные соответствуют требованиям, таким как вещественное, не смешанное, не символическое и т. д.)
Кроме того, небольшой вопрос, как вы думаете, будет ли лучше сначала проверить, является ли созданный список / матрицауже упакованы, прежде чем звонить ToPackedArray
на это?Я думаю, что вызов ToPackedArray
в уже упакованном списке ничего не будет стоить, так как звонок сразу же вернется.
спасибо,
update (1)
Просто хотел упомянуть, что обнаружил, что символы PackedArray не допускаются в демонстрационном CDF, так как я получил ошибку при загрузке одного с одним.Итак, пришлось удалить весь мой упаковочный код.Поскольку я в основном пишу демоверсии, сейчас эта тема представляет для меня академический интерес.Но хотел поблагодарить всех за время и хорошие ответы.