{"group":{"id":1,"name":"Community","lockable":false,"created_at":"2012-01-18T18:02:15.000Z","updated_at":"2025-12-14T01:33:56.000Z","description":"Problems submitted by members of the MATLAB Central community.","is_default":true,"created_by":161519,"badge_id":null,"featured":false,"trending":false,"solution_count_in_trending_period":0,"trending_last_calculated":"2025-12-14T00:00:00.000Z","image_id":null,"published":true,"community_created":false,"status_id":2,"is_default_group_for_player":false,"deleted_by":null,"deleted_at":null,"restored_by":null,"restored_at":null,"description_opc":null,"description_html":null,"published_at":null},"problems":[{"id":340,"title":"Find last non-zero in a given dimension","description":"You are given a logical matrix *BW* _of any dimension_, and a dimension *dim*. You need to find the locations of the last non-zero element of *BW* in that given dimension. If no non-zeros exist at an element location, return a *0* at that location.\r\n\r\nFor example, given:\r\n\r\n  BW = [0 0 0 0; 1 1 1 1; 0 1 1 0]\r\n\r\nWhen dim = 1, you should return:\r\n\r\nans = [2 3 3 2], because these are the row numbers of the last non-zeroes in each column.\r\n\r\nWhen dim = 2, you should return:\r\n\r\nans = [0; 4; 3], because these are the column numbers of the last non-zeroes in each row.\r\n\r\nDon't forget that the input isn't restricted to 2D matrices.","description_html":"\u003cp\u003eYou are given a logical matrix \u003cb\u003eBW\u003c/b\u003e \u003ci\u003eof any dimension\u003c/i\u003e, and a dimension \u003cb\u003edim\u003c/b\u003e. You need to find the locations of the last non-zero element of \u003cb\u003eBW\u003c/b\u003e in that given dimension. If no non-zeros exist at an element location, return a \u003cb\u003e0\u003c/b\u003e at that location.\u003c/p\u003e\u003cp\u003eFor example, given:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eBW = [0 0 0 0; 1 1 1 1; 0 1 1 0]\r\n\u003c/pre\u003e\u003cp\u003eWhen dim = 1, you should return:\u003c/p\u003e\u003cp\u003eans = [2 3 3 2], because these are the row numbers of the last non-zeroes in each column.\u003c/p\u003e\u003cp\u003eWhen dim = 2, you should return:\u003c/p\u003e\u003cp\u003eans = [0; 4; 3], because these are the column numbers of the last non-zeroes in each row.\u003c/p\u003e\u003cp\u003eDon't forget that the input isn't restricted to 2D matrices.\u003c/p\u003e","function_template":"function out = findlastindim(BW,dim)\r\n  out = BW;\r\nend","test_suite":"%% Test the examples\r\nBW = [0 0 0 0; 1 1 1 1; 0 1 1 0];\r\nout_correct = [2 3 3 2];\r\nassert(isequal(findlastindim(BW,1),out_correct))\r\nout_correct = [0; 4; 3];\r\nassert(isequal(findlastindim(BW,2),out_correct))\r\n\r\n%% Test some different matrices\r\nBW = eye(10);\r\nout_correct = 1:10;\r\nassert(isequal(findlastindim(BW,1),out_correct))\r\nassert(isequal(findlastindim(BW,2),out_correct'))\r\n\r\n%% Test some different dimensions (and prevent hard-coded solutions)\r\nBW = rand(10)\u003e0.5;\r\nassert(isequal(findlastindim(BW,3),BW))\r\nassert(isequal(findlastindim(BW,4),BW))\r\n\r\n%% Test something in the 3rd dimension that is small enough to visualise.\r\nBW = cat(3, eye(5), fliplr(eye(5)));\r\nout_correct = [1     0     0     0     2\r\n     0     1     0     2     0\r\n     0     0     2     0     0\r\n     0     2     0     1     0\r\n     2     0     0     0     1];\r\nassert(isequal(findlastindim(BW,3),out_correct))","published":true,"deleted":false,"likes_count":2,"comments_count":1,"created_by":1101,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":49,"test_suite_updated_at":"2012-02-19T01:16:55.000Z","rescore_all_solutions":false,"group_id":43,"created_at":"2012-02-19T00:58:31.000Z","updated_at":"2026-01-06T07:39:02.000Z","published_at":"2012-02-19T01:17:30.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou are given a logical matrix\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eBW\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eof any dimension\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, and a dimension\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003edim\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. You need to find the locations of the last non-zero element of\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eBW\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e in that given dimension. If no non-zeros exist at an element location, return a\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e0\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e at that location.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor example, given:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[BW = [0 0 0 0; 1 1 1 1; 0 1 1 0]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhen dim = 1, you should return:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eans = [2 3 3 2], because these are the row numbers of the last non-zeroes in each column.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhen dim = 2, you should return:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eans = [0; 4; 3], because these are the column numbers of the last non-zeroes in each row.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eDon't forget that the input isn't restricted to 2D matrices.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":2237,"title":"Mmm! Multi-dimensional Matrix Multiplication ","description":"You have got a couple of multi-dimensional matrices, A and B. And want to multiply them. For the first 2 dimensions, an ordinary matrix multiplication applies. And in the other dimensions? Well, they just act as parallel worlds. All 2D matrices are multiplied, for every element in the other dimensions.\r\nYou may assume that the size in the 1st two dimensions allows simple matrix multiplication: A(:,:,1)*B(:,:,1), so size(A(:,:,1),2) == size(B(:,:,1),1), or either A(:,:,1) is a scalar or B(:,:,1) is a scalar.\r\nIn the other dimensions, the sizes of A and B should be eqaal, size(A,n) == size(B,n), for n\u003e2, or either ndims(A)\u003cn or ndims(B)\u003cn, or either size(A,n)==1 or size(B,n)==1, so one of them is a scalar.\r\n\r\nWrite a function |mtimesm| that does this, and ask Mathworks to include it in the |elmat| toolbox of the Next Release.","description_html":"\u003cp\u003eYou have got a couple of multi-dimensional matrices, A and B. And want to multiply them. For the first 2 dimensions, an ordinary matrix multiplication applies. And in the other dimensions? Well, they just act as parallel worlds. All 2D matrices are multiplied, for every element in the other dimensions.\r\nYou may assume that the size in the 1st two dimensions allows simple matrix multiplication: A(:,:,1)*B(:,:,1), so size(A(:,:,1),2) == size(B(:,:,1),1), or either A(:,:,1) is a scalar or B(:,:,1) is a scalar.\r\nIn the other dimensions, the sizes of A and B should be eqaal, size(A,n) == size(B,n), for n\u0026gt;2, or either ndims(A)\u0026lt;n or ndims(B)\u0026lt;n, or either size(A,n)==1 or size(B,n)==1, so one of them is a scalar.\u003c/p\u003e\u003cp\u003eWrite a function \u003ctt\u003emtimesm\u003c/tt\u003e that does this, and ask Mathworks to include it in the \u003ctt\u003eelmat\u003c/tt\u003e toolbox of the Next Release.\u003c/p\u003e","function_template":"function C = mtimesm(A,B)\r\n  C = A*B;\r\nend","test_suite":"%% case 1\r\nA = 1;\r\nB = 2;\r\nC = mtimesm(A,B);\r\nC_correct = 2;\r\nassert(isequal(C,C_correct))\r\n\r\n%% case 2\r\nA = rand(2,3);\r\nB = rand(3,4);\r\nC = mtimesm(A,B);\r\nC_correct = A*B;\r\nassert(isequal(C,C_correct))\r\n\r\n%% case 3\r\nA = rand(2,3);\r\nB = 2;\r\nC = mtimesm(A,B);\r\nC_correct = 2*A;\r\nassert(isequal(C,C_correct))\r\n\r\n%% case 4\r\nA = rand(2,3,2);\r\nB = rand(3,4,2);\r\nC = mtimesm(A,B);\r\nC_correct = cat(3,A(:,:,1)*B(:,:,1),A(:,:,2)*B(:,:,2));\r\nassert(isequal(C,C_correct))\r\n\r\n%% case 5\r\nA = rand(2,3,3);\r\nB = rand(3,4);\r\nC = mtimesm(A,B);\r\nC_correct = cat(3,A(:,:,1)*B,A(:,:,2)*B,A(:,:,3)*B); \r\nassert(isequal(C,C_correct))\r\n\r\n%% case 6\r\nA = rand(4,3,1,2);\r\nB = rand(3,2,2);\r\nC = mtimesm(A,B);\r\nC_correct(:,:,1,1) = A(:,:,1,1)*B(:,:,1);\r\nC_correct(:,:,1,2) = A(:,:,1,2)*B(:,:,1);\r\nC_correct(:,:,2,1) = A(:,:,1,1)*B(:,:,2);\r\nC_correct(:,:,2,2) = A(:,:,1,2)*B(:,:,2);\r\nassert(isequal(C,C_correct))\r\n\r\n%% case 7\r\nA = rand(4,3,1,2);\r\nB = rand(3,2,1,1,2);\r\nC = mtimesm(A,B);\r\nC_correct(:,:,1,1,1) = A(:,:,1,1)*B(:,:,1,1,1);\r\nC_correct(:,:,1,1,2) = A(:,:,1,1)*B(:,:,1,1,2);\r\nC_correct(:,:,1,2,1) = A(:,:,1,2)*B(:,:,1,1,1);\r\nC_correct(:,:,1,2,2) = A(:,:,1,2)*B(:,:,1,1,2);\r\nassert(isequal(C,C_correct))\r\n","published":true,"deleted":false,"likes_count":3,"comments_count":5,"created_by":6556,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":38,"test_suite_updated_at":"2014-03-07T06:22:58.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2014-03-06T11:17:42.000Z","updated_at":"2026-04-03T03:22:22.000Z","published_at":"2014-03-06T11:17:42.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou have got a couple of multi-dimensional matrices, A and B. And want to multiply them. For the first 2 dimensions, an ordinary matrix multiplication applies. And in the other dimensions? Well, they just act as parallel worlds. All 2D matrices are multiplied, for every element in the other dimensions. You may assume that the size in the 1st two dimensions allows simple matrix multiplication: A(:,:,1)*B(:,:,1), so size(A(:,:,1),2) == size(B(:,:,1),1), or either A(:,:,1) is a scalar or B(:,:,1) is a scalar. In the other dimensions, the sizes of A and B should be eqaal, size(A,n) == size(B,n), for n\u0026gt;2, or either ndims(A)\u0026lt;n or ndims(B)\u0026lt;n, or either size(A,n)==1 or size(B,n)==1, so one of them is a scalar.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWrite a function\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003emtimesm\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e that does this, and ask Mathworks to include it in the\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eelmat\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e toolbox of the Next Release.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"}],"problem_search":{"errors":[],"problems":[{"id":340,"title":"Find last non-zero in a given dimension","description":"You are given a logical matrix *BW* _of any dimension_, and a dimension *dim*. You need to find the locations of the last non-zero element of *BW* in that given dimension. If no non-zeros exist at an element location, return a *0* at that location.\r\n\r\nFor example, given:\r\n\r\n  BW = [0 0 0 0; 1 1 1 1; 0 1 1 0]\r\n\r\nWhen dim = 1, you should return:\r\n\r\nans = [2 3 3 2], because these are the row numbers of the last non-zeroes in each column.\r\n\r\nWhen dim = 2, you should return:\r\n\r\nans = [0; 4; 3], because these are the column numbers of the last non-zeroes in each row.\r\n\r\nDon't forget that the input isn't restricted to 2D matrices.","description_html":"\u003cp\u003eYou are given a logical matrix \u003cb\u003eBW\u003c/b\u003e \u003ci\u003eof any dimension\u003c/i\u003e, and a dimension \u003cb\u003edim\u003c/b\u003e. You need to find the locations of the last non-zero element of \u003cb\u003eBW\u003c/b\u003e in that given dimension. If no non-zeros exist at an element location, return a \u003cb\u003e0\u003c/b\u003e at that location.\u003c/p\u003e\u003cp\u003eFor example, given:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eBW = [0 0 0 0; 1 1 1 1; 0 1 1 0]\r\n\u003c/pre\u003e\u003cp\u003eWhen dim = 1, you should return:\u003c/p\u003e\u003cp\u003eans = [2 3 3 2], because these are the row numbers of the last non-zeroes in each column.\u003c/p\u003e\u003cp\u003eWhen dim = 2, you should return:\u003c/p\u003e\u003cp\u003eans = [0; 4; 3], because these are the column numbers of the last non-zeroes in each row.\u003c/p\u003e\u003cp\u003eDon't forget that the input isn't restricted to 2D matrices.\u003c/p\u003e","function_template":"function out = findlastindim(BW,dim)\r\n  out = BW;\r\nend","test_suite":"%% Test the examples\r\nBW = [0 0 0 0; 1 1 1 1; 0 1 1 0];\r\nout_correct = [2 3 3 2];\r\nassert(isequal(findlastindim(BW,1),out_correct))\r\nout_correct = [0; 4; 3];\r\nassert(isequal(findlastindim(BW,2),out_correct))\r\n\r\n%% Test some different matrices\r\nBW = eye(10);\r\nout_correct = 1:10;\r\nassert(isequal(findlastindim(BW,1),out_correct))\r\nassert(isequal(findlastindim(BW,2),out_correct'))\r\n\r\n%% Test some different dimensions (and prevent hard-coded solutions)\r\nBW = rand(10)\u003e0.5;\r\nassert(isequal(findlastindim(BW,3),BW))\r\nassert(isequal(findlastindim(BW,4),BW))\r\n\r\n%% Test something in the 3rd dimension that is small enough to visualise.\r\nBW = cat(3, eye(5), fliplr(eye(5)));\r\nout_correct = [1     0     0     0     2\r\n     0     1     0     2     0\r\n     0     0     2     0     0\r\n     0     2     0     1     0\r\n     2     0     0     0     1];\r\nassert(isequal(findlastindim(BW,3),out_correct))","published":true,"deleted":false,"likes_count":2,"comments_count":1,"created_by":1101,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":49,"test_suite_updated_at":"2012-02-19T01:16:55.000Z","rescore_all_solutions":false,"group_id":43,"created_at":"2012-02-19T00:58:31.000Z","updated_at":"2026-01-06T07:39:02.000Z","published_at":"2012-02-19T01:17:30.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou are given a logical matrix\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eBW\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eof any dimension\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, and a dimension\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003edim\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. You need to find the locations of the last non-zero element of\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eBW\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e in that given dimension. If no non-zeros exist at an element location, return a\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e0\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e at that location.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor example, given:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[BW = [0 0 0 0; 1 1 1 1; 0 1 1 0]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhen dim = 1, you should return:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eans = [2 3 3 2], because these are the row numbers of the last non-zeroes in each column.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhen dim = 2, you should return:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eans = [0; 4; 3], because these are the column numbers of the last non-zeroes in each row.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eDon't forget that the input isn't restricted to 2D matrices.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":2237,"title":"Mmm! Multi-dimensional Matrix Multiplication ","description":"You have got a couple of multi-dimensional matrices, A and B. And want to multiply them. For the first 2 dimensions, an ordinary matrix multiplication applies. And in the other dimensions? Well, they just act as parallel worlds. All 2D matrices are multiplied, for every element in the other dimensions.\r\nYou may assume that the size in the 1st two dimensions allows simple matrix multiplication: A(:,:,1)*B(:,:,1), so size(A(:,:,1),2) == size(B(:,:,1),1), or either A(:,:,1) is a scalar or B(:,:,1) is a scalar.\r\nIn the other dimensions, the sizes of A and B should be eqaal, size(A,n) == size(B,n), for n\u003e2, or either ndims(A)\u003cn or ndims(B)\u003cn, or either size(A,n)==1 or size(B,n)==1, so one of them is a scalar.\r\n\r\nWrite a function |mtimesm| that does this, and ask Mathworks to include it in the |elmat| toolbox of the Next Release.","description_html":"\u003cp\u003eYou have got a couple of multi-dimensional matrices, A and B. And want to multiply them. For the first 2 dimensions, an ordinary matrix multiplication applies. And in the other dimensions? Well, they just act as parallel worlds. All 2D matrices are multiplied, for every element in the other dimensions.\r\nYou may assume that the size in the 1st two dimensions allows simple matrix multiplication: A(:,:,1)*B(:,:,1), so size(A(:,:,1),2) == size(B(:,:,1),1), or either A(:,:,1) is a scalar or B(:,:,1) is a scalar.\r\nIn the other dimensions, the sizes of A and B should be eqaal, size(A,n) == size(B,n), for n\u0026gt;2, or either ndims(A)\u0026lt;n or ndims(B)\u0026lt;n, or either size(A,n)==1 or size(B,n)==1, so one of them is a scalar.\u003c/p\u003e\u003cp\u003eWrite a function \u003ctt\u003emtimesm\u003c/tt\u003e that does this, and ask Mathworks to include it in the \u003ctt\u003eelmat\u003c/tt\u003e toolbox of the Next Release.\u003c/p\u003e","function_template":"function C = mtimesm(A,B)\r\n  C = A*B;\r\nend","test_suite":"%% case 1\r\nA = 1;\r\nB = 2;\r\nC = mtimesm(A,B);\r\nC_correct = 2;\r\nassert(isequal(C,C_correct))\r\n\r\n%% case 2\r\nA = rand(2,3);\r\nB = rand(3,4);\r\nC = mtimesm(A,B);\r\nC_correct = A*B;\r\nassert(isequal(C,C_correct))\r\n\r\n%% case 3\r\nA = rand(2,3);\r\nB = 2;\r\nC = mtimesm(A,B);\r\nC_correct = 2*A;\r\nassert(isequal(C,C_correct))\r\n\r\n%% case 4\r\nA = rand(2,3,2);\r\nB = rand(3,4,2);\r\nC = mtimesm(A,B);\r\nC_correct = cat(3,A(:,:,1)*B(:,:,1),A(:,:,2)*B(:,:,2));\r\nassert(isequal(C,C_correct))\r\n\r\n%% case 5\r\nA = rand(2,3,3);\r\nB = rand(3,4);\r\nC = mtimesm(A,B);\r\nC_correct = cat(3,A(:,:,1)*B,A(:,:,2)*B,A(:,:,3)*B); \r\nassert(isequal(C,C_correct))\r\n\r\n%% case 6\r\nA = rand(4,3,1,2);\r\nB = rand(3,2,2);\r\nC = mtimesm(A,B);\r\nC_correct(:,:,1,1) = A(:,:,1,1)*B(:,:,1);\r\nC_correct(:,:,1,2) = A(:,:,1,2)*B(:,:,1);\r\nC_correct(:,:,2,1) = A(:,:,1,1)*B(:,:,2);\r\nC_correct(:,:,2,2) = A(:,:,1,2)*B(:,:,2);\r\nassert(isequal(C,C_correct))\r\n\r\n%% case 7\r\nA = rand(4,3,1,2);\r\nB = rand(3,2,1,1,2);\r\nC = mtimesm(A,B);\r\nC_correct(:,:,1,1,1) = A(:,:,1,1)*B(:,:,1,1,1);\r\nC_correct(:,:,1,1,2) = A(:,:,1,1)*B(:,:,1,1,2);\r\nC_correct(:,:,1,2,1) = A(:,:,1,2)*B(:,:,1,1,1);\r\nC_correct(:,:,1,2,2) = A(:,:,1,2)*B(:,:,1,1,2);\r\nassert(isequal(C,C_correct))\r\n","published":true,"deleted":false,"likes_count":3,"comments_count":5,"created_by":6556,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":38,"test_suite_updated_at":"2014-03-07T06:22:58.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2014-03-06T11:17:42.000Z","updated_at":"2026-04-03T03:22:22.000Z","published_at":"2014-03-06T11:17:42.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou have got a couple of multi-dimensional matrices, A and B. And want to multiply them. For the first 2 dimensions, an ordinary matrix multiplication applies. And in the other dimensions? Well, they just act as parallel worlds. All 2D matrices are multiplied, for every element in the other dimensions. You may assume that the size in the 1st two dimensions allows simple matrix multiplication: A(:,:,1)*B(:,:,1), so size(A(:,:,1),2) == size(B(:,:,1),1), or either A(:,:,1) is a scalar or B(:,:,1) is a scalar. In the other dimensions, the sizes of A and B should be eqaal, size(A,n) == size(B,n), for n\u0026gt;2, or either ndims(A)\u0026lt;n or ndims(B)\u0026lt;n, or either size(A,n)==1 or size(B,n)==1, so one of them is a scalar.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWrite a function\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003emtimesm\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e that does this, and ask Mathworks to include it in the\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eelmat\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e toolbox of the Next Release.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"}],"term":"tag:\"multi-dimensional\"","current_player_id":null,"fields":[{"name":"page","type":"integer","callback":null,"default":1,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"per_page","type":"integer","callback":null,"default":50,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"sort","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"body","type":"text","callback":null,"default":"*:*","directive":null,"facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":false},{"name":"group","type":"string","callback":null,"default":null,"directive":"group","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"difficulty_rating_bin","type":"string","callback":null,"default":null,"directive":"difficulty_rating_bin","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"id","type":"integer","callback":null,"default":null,"directive":"id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"tag","type":"string","callback":null,"default":null,"directive":"tag","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"product","type":"string","callback":null,"default":null,"directive":"product","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_at","type":"timeframe","callback":{},"default":null,"directive":"created_at","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"profile_id","type":"integer","callback":null,"default":null,"directive":"author_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_by","type":"string","callback":null,"default":null,"directive":"author","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player_id","type":"integer","callback":null,"default":null,"directive":"solver_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player","type":"string","callback":null,"default":null,"directive":"solver","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"solvers_count","type":"integer","callback":null,"default":null,"directive":"solvers_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"comments_count","type":"integer","callback":null,"default":null,"directive":"comments_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"likes_count","type":"integer","callback":null,"default":null,"directive":"likes_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leader_id","type":"integer","callback":null,"default":null,"directive":"leader_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leading_solution","type":"integer","callback":null,"default":null,"directive":"leading_solution","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true}],"filters":[{"name":"asset_type","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":"\"cody:problem\"","prepend":true},{"name":"profile_id","type":"integer","callback":{},"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":"author_id","static":null,"prepend":true}],"query":{"params":{"per_page":50,"term":"tag:\"multi-dimensional\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"multi-dimensional\"","","\"","multi-dimensional","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007fac1ef05dd0\u003e":null,"#\u003cMathWorks::Search::Field:0x00007fac1ef05d30\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007fac1ef05470\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007fac1ef06050\u003e":1,"#\u003cMathWorks::Search::Field:0x00007fac1ef05fb0\u003e":50,"#\u003cMathWorks::Search::Field:0x00007fac1ef05f10\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007fac1ef05e70\u003e":"tag:\"multi-dimensional\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007fac1ef05e70\u003e":"tag:\"multi-dimensional\""},"queried_facets":{}},"query_backend":{"connection":{"configuration":{"index_url":"http://index-op-v2/solr/","query_url":"http://search-op-v2/solr/","direct_access_index_urls":["http://index-op-v2/solr/"],"direct_access_query_urls":["http://search-op-v2/solr/"],"timeout":10,"vhost":"search","exchange":"search.topic","heartbeat":30,"pre_index_mode":false,"host":"rabbitmq-eks","port":5672,"username":"search","password":"J3bGPZzQ7asjJcCk","virtual_host":"search","indexer":"amqp","http_logging":"true","core":"cody"},"query_connection":{"uri":"http://search-op-v2/solr/cody/","proxy":null,"connection":{"parallel_manager":null,"headers":{"User-Agent":"Faraday v1.0.1"},"params":{},"options":{"params_encoder":"Faraday::FlatParamsEncoder","proxy":null,"bind":null,"timeout":null,"open_timeout":null,"read_timeout":null,"write_timeout":null,"boundary":null,"oauth":null,"context":null,"on_data":null},"ssl":{"verify":true,"ca_file":null,"ca_path":null,"verify_mode":null,"cert_store":null,"client_cert":null,"client_key":null,"certificate":null,"private_key":null,"verify_depth":null,"version":null,"min_version":null,"max_version":null},"default_parallel_manager":null,"builder":{"adapter":{"name":"Faraday::Adapter::NetHttp","args":[],"block":null},"handlers":[{"name":"Faraday::Response::RaiseError","args":[],"block":null}],"app":{"app":{"ssl_cert_store":{"verify_callback":null,"error":null,"error_string":null,"chain":null,"time":null},"app":{},"connection_options":{},"config_block":null}}},"url_prefix":"http://search-op-v2/solr/cody/","manual_proxy":false,"proxy":null},"update_format":"RSolr::JSON::Generator","update_path":"update","options":{"url":"http://search-op-v2/solr/cody"}}},"query":{"params":{"per_page":50,"term":"tag:\"multi-dimensional\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"multi-dimensional\"","","\"","multi-dimensional","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007fac1ef05dd0\u003e":null,"#\u003cMathWorks::Search::Field:0x00007fac1ef05d30\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007fac1ef05470\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007fac1ef06050\u003e":1,"#\u003cMathWorks::Search::Field:0x00007fac1ef05fb0\u003e":50,"#\u003cMathWorks::Search::Field:0x00007fac1ef05f10\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007fac1ef05e70\u003e":"tag:\"multi-dimensional\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007fac1ef05e70\u003e":"tag:\"multi-dimensional\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":340,"difficulty_rating":"medium"},{"id":2237,"difficulty_rating":"medium-hard"}]}}