Symbolic array pre-allocation
9 次查看(过去 30 天)
显示 更早的评论
Symbolic array pre-allocation only allocates pointers as I understood it from reading the forum. This is causing a major slowdown in code we are looking at
a=sym(zeros(50000,1));
Filling the area with relatively simple expression e.g. '3+sqrt(5)/sqrt(7)' a serious slowdown is noted around the 9000th index.
Would it be possible to allocate memory by defining the sym array (in the definition) with large expressions '3+sqrt(1)+sqrt(2)+sqrt(3)+sqrt(4)+sqrt(5)+sqrt(6)+sqrt(7)' for all elements 1:50000, so that effectively a memory allocation is forced at the definition step. Is this possible in the definition of sym? I tried repmat, but didn't get it too work.
2 个评论
Siddharth Sundar
2014-10-29
- Can you check the output of the memory command before and after the 9000th iteration of the for loop you are to define these expressions? - What is the expression you are using in the 9000th iteration?
采纳的回答
Stefan Wehmeier
2014-10-30
My question is in which form do you have the 50000 entries you want to fill in. As strings in a cell array A? Then
B = cellfun(@sym, A, 'UniformOutput', false);
list1 = [B{:}];
is better. Or really 50000 times the same string? Then avoid calling sym(..) on it in a loop.
All sym vectors are internally vectors of pointers. You cannot pre-allocate the memory these pointers point to ...
0 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Assumptions 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!