С этими линиями из Себастьяна я играл. Я думаю, следующие строки показывают ответ на мой вопрос.
На словах - даже при нулевом пространстве результат получается быстрым.
С моей текущего приложения Я проверил четыре различных сценария:
plhs[0] = mxCreateNumericArray(targetDimCount, targetDims, targetClass, mxREAL);
plhs[0] = mxCreateNumericArray(0, 0, targetClass, mxREAL); mxSetData(plhs[0],mxMalloc(destLen_in_Bytes));
plhs[0] = mxCreateNumericArray(0, 0, targetClass, mxREAL); mxSetData(plhs[0],mxRealloc(mxGetData(plhs[0]),destLen_in_Bytes));
plhs[0] = mxCreateUninitNumericArray(targetDimCount, targetDims, targetClass, mxREAL);
в результате чего эти моменты времени (для выделенных матриц размера, указанных в колонке один)
size time 1 time 2 time 3 time 4
1000 0.037401 0.037263 0.039294 0.037628
2000 0.14906 0.14937 0.15278 0.14917
3000 0.33497 0.33449 0.34601 0.33749
4000 0.61207 0.60546 0.61563 0.60086
5000 0.94057 0.93076 0.96147 0.95723
6000 1.3497 1.3475 1.3794 1.3559
7000 1.837 1.8265 1.8776 1.846
8000 2.398 2.3893 2.4625 2.3885
9000 3.0264 3.047 3.1374 3.0339
10000 3.7658 3.7677 3.8392 3.7862
20000 15.208 14.968 15.404 15.143
30000 13.583 13.58 13.955 13.648
50000 13.291 13.236 13.535 13.478
С точки зрения этих чисел, мое мнение таково, что перераспределение - это плохая идея (но не так уж плохо, как показывают сроки), и обнуление значений не является очень большим эффектом. Хорошо - еще можно удивляться поведению от 10000 до 30000, но это было бы более научным. Использование malloc (только для целей тестирования) не работает, поскольку выделенное хранилище должно быть для plhs - и оно выходит из строя, если хранилище не распределено по mx ***
Не уверен, что это помогает, но, возможно, вы можете получить некоторое вдохновение от вопроса [Быстрый способ инициализации массивов] (http://stackoverflow.com/questions/14169222/faster-way-to-initialize-arrays-via -empty-matrix-multipication-matlab) –