Permuting of dimensions can always be done as a sequence of elementary permute operations, where" elementary" means interchanging only two dimensions. This is only a guess, as I don't really know what permute does under the hood. While this is not exactly the best way to profile memory usage (better use a proper memory profiler, something like Intel Inspector XE), it does show to some degree that permute is indeed not working in-place. You can see how at its peak the function reached twice as much memory usage as when it returned. I also repeated the test under perfmon.exe which showed the same pattern: I then ran the function simply as: %clear aĪnd watched the memory usage It went from 1.8 gigs in use, and rose to 5.2 then quickly down to 3.6 gigs. I only have 8 gigs of RAM on my laptop, so to avoid thrashing I modified your function as: function out = mtest() I also set the "update speed" to "high" to get a finer time resolution. In Windows 10, I opened the "task manager" on the "performance" tab with the "memory" graphs in view. The permute method in fact does create a second copy of the matrix with the data permuted and returns it. Yes, this looks hard and it is indeed hard! To check if you understand thoroughly, try predicting a square Matrix's similar different permutations.Your argument is flawed because the MATLAB memory profiler is not telling you the truth! So, there will be 1 4x2 (4x2x1) matrix(itself!). * G = permute(A,) % this makes no difference, using to show the reasoningĤx2x1 ( row(1) dimension of A = 4, column(2) dimension of A = 2, page(3) dimension of A = 1 4 is row dimension, 2 is column dimension and 1 is page dimension for the generated G) * F = permute(A,) % this is transpose and same as Ģx4x1 ( column(2) dimension of A = 2, row(1) dimension of A = 4, page(3) dimension of A = 1 2 is row dimension, 4 is column dimension and 1 is page dimension for the generated F) So, there will be 4 2x1 (2x1x4) column matrixes. As in: ans(:,:,1) =Ģx1x4 ( column(2) dimension of A = 2, page(3) dimension of A = 1, row(1) dimension of A = 4 2 is row dimension, 1 is column dimension and 4 is page dimension for the generated E) So, there will be 2 4x1 (4x1x2) column matrixes. As in: ans(:,:,1) =Ĥx1x2 ( row(1) dimension of A = 4, page(3) dimension of A = 1, column(2) dimension of A = 2 4 is row dimension, 1 is column dimension and 2 is page dimension for the generated D) So, there will be 2 1x4 (1x4x2) row matrixes. As in: ans(:,:,1) =ġx4x2 ( page(3) dimension of A = 1, row(1) dimension of A = 4, column(2) dimension of A = 2 1 is row dimension, 4 is column dimension and 2 is page dimension for the generated C) So, there will be 4 1x2 (1x2x4) row matrixes. G = permute(A,) % means ġx2x4 ( page(3) dimension of A = 1, column(2) dimension of A = 2, row(1) dimension of A = 4 1 is row dimension, 2 is column dimension and 4 is page dimension for the generated B. % 3 = page, 2 = column and 1 = row dimensions):ī = permute(A,) % means Ĭ = permute(A,) % means ĭ = permute(A,) % means Į = permute(A,) % means į = permute(A,) % means % (numbers in the order argument of permute function indicates dimensions, Now let's move to the examples, Finally: % A has 4 rows, 2 columns and 1 page Order argument passed to permute swap these dimensions in the matrix and produce an awkward combination of arrays, I think permute is a misnomer for this effect. B=zeros(10,3) has 10 rows, 3 columns and 1 page, this order is important!) And if you don't specify a dimension, its default count is set to 1. Here are some examples to prevent you from suffering a similar excruciating pain:įirst, let's remember the dimensions' names of matrix in matlab: A = zeros(4,5,7), matrix A has 4 rows, 5 columns and 7 pages. Therefore, I used the F*ck word many times during " my journey of understanding the permute function". Wow, this is one of the hardest functions to figure out among all the different SDKs I have used up to now.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |