views:

1505

answers:

8

I programmed in MATLAB for many years, but switched to using R exclusively in the past few years so I'm a little out of practice. I'm interviewing a candidate today who describes himself as a MATLAB expert.

What MATLAB interview questions should I ask?

Some other sites with resources for this:

+1  A: 

I. I think this recent SO question on indexing is a very good question for an "expert".

I have a 2D array, call it 'A'. I have two other 2D arrays, call them 'ix' and 'iy'. I would like to create an output array whose elements are the elements of A at the index pairs provided by x_idx and y_idx. I can do this with a loop as follows:

for i=1:nx
     for j=1:ny
         output(i,j) = A(ix(i,j),iy(i,j));
     end 
end

How can I do this without the loop? If I do output = A(ix,iy), I get the value of A over the whole range of (ix)X(iy).

II. Basic knowledge of operators like element-wise multiplication between two matrices (.*).

III. Logical indexing - generate a random symmetric matrix with values from 0-1 and set all values above T to 0.

IV. Read a file with some properly formatted data into a matrix (importdata)

V. Here's another sweet SO question

I have three 1-d arrays where elements are some values and I want to compare every element in one array to all elements in other two.

For example:

a=[2,4,6,8,12]
b=[1,3,5,9,10]
c=[3,5,8,11,15]

I want to know if there are same values in different arrays (in this case there are 3,5,8)

Btw, there's an excellent chance your interviewee will Google "MATLAB interview questions" and see this post :)

Jacob
Eric
Lol, maybe this should be obfuscated :)
Jacob
+3  A: 

Ask questions about his expertise and experience in applying MATLAB in your domain.

Ask questions about how he would approach designing an application for implementation in MATLAB. If he refers to recent features of MATLAB, ask him to explain them, and how they are different from the older features they replace or supplement, and why they are preferable (or not).

Ask questions about his expertise with MATLAB data structures. Many of the MATLAB 'experts' I've come across are very good at writing code, but very poor at determining what are the best data structures for the job in hand. This is often a direct consequence of their being domain experts who've picked up MATLAB rather than having been trained in computerism. The result is often good code which has to compensate for the wrong data structures.

Ask questions about his experience, if any, with other languages/systems and invite him to expand upon his observations about the relative strengths and weaknesses of MATLAB.

Ask for top tips on optimising MATLAB programs. Expect the answers: vectorisation, pre-allocation, clearing unused variables, etc.

Ask about his familiarity with the MATLAB profiler, debugger and lint tools. I've recently discovered that the MATLAB 'expert' over in the corner here had never, in 10 years using the tool, found the profiler.

That should get you started.

High Performance Mark
+1  A: 

Possible question: I have an array A of n R,G,B triplets. It is a 3xn matrix. I have another array B in the form 1xn which stores an index value (association to a cluster) for each triplet.

How do I plot the triplets of A in 3D space (using plot3 function), coloring each triplet according to its index in B? (The goal is to qualitatively evaluate my clustering)

Really, really good programmers who are MATLAB novices won't be able to give you an efficient (== MATLAB style) solution. However, it is a very simple problem if you do know your MATLAB.

ypnos
+4  A: 

We get several new people in the technical support department here at MathWorks. This is all post-hiring (I am not involved in the hiring), but I like to get to know people, so I give them the "Impossible and adaptive MATLAB programming challenge"

I start out with them at MATLAB and give them some .MAT file with data in it. I ask them to analyze it, without further instruction. I can very quickly get a feel for their actual experience.

http://blogs.mathworks.com/videos/2008/07/02/puzzler-data-exploration/

The actual challenge does not mean much of anything, I learn more from watching them attempt it.

Are they making scripts, functions, command line or GUI based? Do they seem to have a clear idea where they are going with it? What level of confidence do they have with what they are doing?

Are they computer scientists or an engineer that learned to program. CS majors tend to do things like close their parenthesis immediately, and other small optimizations like that. People that have been using MATLAB a while tend to capture the handles from plotting commands for later use.

How quickly do they navigate the documentation? Once I see they are going down the 'right' path then I will just change the challenge to see how quickly they can do plots, pull out submatrices etc...

I will throw out some old stuff from Project Euler. Mostly just ramp up the questions until one of us is stumped.

MatlabDoug
+1  A: 

Depends a bit what you want to test.

To test MATLAB fluency, there are several nice Stack Overflow questions that you could use to test e.g. array manipulations (example 1, example 2), or you could use fix-this problems like this question (I admit, I'm rather fond of that one), or look into this list for some highly MATLAB-specific stuff. If you want to be a bit mean, throw in a question like this one, where the best solution is a loop, and the typical MATLAB-way-of-thinking solution would just fill up the memory.

However, it may be more useful to ask more general programming questions that are related to your area of work and see whether they get the problem solved with MATLAB.

For example, since I do image analysis, I may ask them to design a class for loading images of different formats (a MATLAB expert should know how to do OOP, after all, it has been out for two years now), and then ask follow-ups as to how to deal with large images (I want to see a check on how much memory would be used - or maybe they know memory.m - and to hear about how MATLAB usually works with doubles), etc.

Jonas
+4  A: 

This is a bit subjective, but I'll bite... ;)

For someone who is a self-professed MATLAB expert, here are some of the things that I would personally expect them to be able to illustrate in an interview:

  • How to use the arithmetic operators for matrix or element-wise operations.
  • A familiarity with all the basic data types and how to convert effortlessly between them.
  • A complete understanding of matrix indexing and assignment, be it logical, linear, or subscripted indexing (basically, everything on this page of the documentation).
  • An ability to manipulate multi-dimensional arrays.
  • The understanding and regular usage of optimizations like preallocation and vectorization.
  • An understanding of how to handle file I/O for a number of different situations.
  • A familiarity with handle graphics and all of the basic plotting capabilities.
  • An intimate knowledge of the types of functions in MATLAB, in particular nested functions. Specifically, given the following function:

    function fcnHandle = counter
      value = 0;
      function currentValue = increment
        value = value+1;
        currentValue = value;
      end
      fcnHandle = @increment;
    end
    

    They should be able to tell you what the contents of the variable output will be in the following code, without running it in MATLAB:

    >> f1 = counter();
    >> f2 = counter();
    >> output = [f1() f1() f2() f1() f2()];  %# WHAT IS IT?!
    
gnovice
@gnovice: Good catch. (You know what I'm talking about.)
Bill the Lizard
Whee, I got it right! Would you hire me now?
Jonas
@Jonas: Sure, I'll hire you. You don't mind severely-reduced pay, do you? ;)
gnovice
+1  A: 

When I found myself in a similar situation, I asked them to show us how well they could translate some formulas into code. So I had asked them to code some simple tasks. I translated -in a hurry-, some of the tasks. Forgive my bad English.

gd047
+2  A: 

Floating Point Questions

Given that Matlab's main (only?) data type is the double precision floating point matrix, and that most people use floating point arithmetic -- whether they know it or not -- I'm astonished that nobody has suggested asking basic floating point questions. Here are some floating point questions of variable difficulty:


  1. What is the range of |x|, an IEEE dp fpn?

  2. Approximately how many IEEE dp fpns are there?

  3. What is machine epsilon?

  4. x = 10^22 is exactly representable as a dp fpn. What are the fpns xp and xs just below and just above x ?

  5. How many dp fpns are in [1,2)? How many atoms are on an edge of a 1-inch sugar cube?

  6. Explain why sin(pi) ~= 0, but cos(pi) = -1.

  7. Why is if abs(x1-x2) < 1e-10 then a bad convergence test?

  8. Why is if f(a)*f(b) < 0 then a bad sign check test?

  9. The midpoint c of the interval [a,b] may be calculated as:

     c1 = (a+b)/2, or 
     c2 = a + (b-a)/2, or
     c3 = a/2 + b/2. 
    

    Which do you prefer? Explain.

  10. Calculate in Matlab: a = 4/3; b = a-1; c = b+b+b; e = 1-c; Mathematically, e should be zero but Matlab gives e = 2.220446049250313e-016 = 2^(-52), machine epsilon (eps). Explain.

  11. Given that realmin = 2.225073858507201e-308, and Matlab's u = rand gives a dp fpn uniformly distributed over the open interval (0,1):

    Are the floating point numbers [2^(-400), 2^(-100), 2^(-1)]

    = 3.872591914849318e-121, 7.888609052210118e-031, 5.000000000000000e-001

    equally likely to be output by rand ?

  12. Matlab's rand uses the Mersenne Twister rng which has a period of (2^19937-1)/2, yet there are only about 2^64 dp fpns. Explain.

  13. Find the smallest IEEE double precision fpn x, 1 < x < 2, such that x*(1/x) ~= 1.

    Write a short Matlab function to search for such a number.
    Answer: Alan Edelman, MIT

  14. Would you fly in a plane whose software was written by you?


Regards,

Derek O’Connor

Derek O'Connor