Problem 44350. Breaking Out of the Matrix
Is the second test case correct?
I guess it should be M(:,:,y)==x(y).
Your syntax works just as well, Yuichi. With the arrayfun @(y) going from 1:numel(x), y=x(y).
Is the 3rd test case good? I think something is wrong there!
All the other cases pass but the 3rd fails with this error:
"Index exceeds matrix dimensions. Error in Test3>@(a)isequal(M(:,:,a),eye(2)) Error in Test3 (line 7) a1=arrayfun(@(a) isequal(M(:,:,a),eye(2)),ids);"
I checked the result manually and it should be fine (provided that I understood the task right)
Viko, while it's possible that my test suite has an issue (just check out my Hard problem on Pandigital Numbers for an example in that!) we've had a lot of solvers on this one. It's likely that one of them would have found something wrong with the test suite. However, it's still possible that your solution hit a weird corner case because you were doing it in a unique manner. Please post a comment from the solution that gave you that error so I can take a look at your code.
Hey, I have similar problem as Viko (the same error). I am just wondering why is the function checking submatrix up until index 36 when matrix M (derived from matrix x = eye(7)) has dimensions (2,2,16).
Viko and Martin - If you are breaking down a 7x7 matrix into multiple 2x2 matrices, you will end up with 36 of them. You will end up with 16 of them if you are breaking a 7x7 up into a set of 4x4 matrices, or if your 2x2 matrices do not overlap with each other.
Set A=reshape(1:49,7,7) Because you are breaking A up into multiple 2x2 matrices, the first matrix will be [1 8 ; 2 9] The next one will be [2 9, 3 10]. It will continue all the way down and across to your final matrix - [41 48 ; 42 49]. There will be 36 of them total. If you are getting a 2x2x16 matrix, you may have misunderstood the problem. Please post a comment from your solution so I can see your code.
Forgot to add that if your 2x2 matrices do not overlap in the 7x7, you will get an error since you will run out of space in the last series of matrices. Perhaps that is your problem?
Didn´t like that one. Sorry.
The Problem doesn´t specify if there´s any intentional overlap. I had to try ond error through the test bench. The test bench should be for testing only (not for describing the Problem), in my opinion. Or is there any intuitive or obvious way i am missing?
Anselm, the problem statement, which describes how you should break a 3x4 matrix up into 2x3 matrices, shows that there are common values in the matrices that comprise the correct solution. The bottom row for X(:,:,1) [2 5 8] is the top row of X(:,:,2). Likewise, the last two columns of X(:,:,1) [4 7 ; 5 8] are the first two columns of X(:,:,3) Unless R=1 and C=1 (which is true in one of the test cases) there will be at least some "intentional overlap" in the matrices that make up the correct solution.
That's what i ment. In the Problem Statement there is overlap, whether it is intentional or not, one can't decide. Looking at the test cases you can figure out, that when R/C>1 there must be overlap (in one of the cases "intentional" overlap). When R/C=1 there cant be any overlap. But if you think pratically (like it was an real world problem), one of both cases doesn´t make sense. If the overlap is needed the R/C=1 makes no sense and vice versa. To make my critism constructive: I would remove the R/C=1 cases and i'd add to the proplem, that there shall a be minimum number of matrices and there shall be at lest one element overlap. Excess overlap shall be between the last two matrices.
R/C=1 implies that R=C, not necessarily that both R=1 and C=1. When R=C and they are both greater than 1, there is intentional overlap because that is the way the problem is defined.
Believe it or not, this is a real world problem, Anselm. One of the people I work with asked me how to do exactly this particular calculation for some work he was doing. I gave him an answer (my answer to the problem, in fact) but figured that there had to be a better way to do it. A good way to determine the best way to do something is to submit it as a problem to Cody, and let the MATLAB geniuses do their thing.
The problem that you are describing sounds interesting. How about you write it up and submit it to Cody? They're always looking for new creators, after all.
to help clarify (not really) one application would be in convolutional networks, where for an input image M you might want to find the list X of all image blocks of size R*C (and R=C=1 is just a extreme case where you end up listing individual pixels)
in my opinion this problem need a clarification, i.e. you have to move along columns and rows by incrementing only one row or one column each time.
It may sound obvious but I lost a lot of time solving the wrong problem, i.e. I moved along column first and row after, by incrementing each time by R and C.
I added a couple more sentences in the description to (hopefully) clear things up for people who were having the same problem you did, M.M.A.
Solution CommentsShow comments
Problem Recent Solvers340
Set some matrix elements to zero
More from this Author80
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!Start Hunting!