ejemplo - ¿Preguntas de la entrevista de MATLAB?
title position matlab (7)
MATLAB en MATLAB durante muchos años, pero cambié a usar R exclusivamente en los últimos años, así que estoy un poco fuera de práctica. Hoy estoy entrevistando a un candidato que se describe a sí mismo como un experto de MATLAB.
¿Qué preguntas de la entrevista MATLAB debo hacer?
Algunos otros sitios con recursos para esto:
Preguntas flotantes
Dado que el tipo de datos principal (¿único?) De Matlab es la matriz de coma flotante de doble precisión, y que la mayoría de la gente usa la aritmética de coma flotante, lo sepan o no, estoy sorprendido de que nadie haya sugerido preguntar el punto flotante básico. preguntas Aquí hay algunas preguntas de coma flotante de dificultad variable:
¿Cuál es el rango de
|x|
, un IEEE dp fpn?¿Aproximadamente cuántos IEEE dp fpns hay?
¿Qué es épsilon de máquina ?
x = 10^22
es exactamente representable como dp fpn. ¿Cuáles son los fpns xp y xs justo debajo y justo encima de x?¿Cuántos dp fpns hay en
[1,2)
? ¿Cuántos átomos hay en un borde de un cubo de azúcar de 1 pulgada?Explica por qué
sin(pi) ~= 0
, perocos(pi) = -1
.¿Por qué
if abs(x1-x2) < 1e-10 then
una prueba de mala convergencia?¿Por qué
if f(a)*f(b) < 0 then
una prueba de comprobación de un signo negativo?El punto medio
c
del intervalo[a,b]
puede calcularse como:c1 = (a+b)/2, or c2 = a + (b-a)/2, or c3 = a/2 + b/2.
¿Cual prefieres? Explique.
Calcule en Matlab:
a = 4/3; b = a-1; c = b+b+b; e = 1-c;
a = 4/3; b = a-1; c = b+b+b; e = 1-c;
Matemáticamente,e
debería ser cero, pero Matlab dae = 2.220446049250313e-016 = 2^(-52)
, máquina épsilon (eps). Explique.Dado que
realmin = 2.225073858507201e-308
, yu = rand
Matlab da una dp fpn uniformemente distribuida en el intervalo abierto (0,1):Son los números de coma flotante
[2^(-400), 2^(-100), 2^(-1)]
= 3.872591914849318e-121, 7.888609052210118e-031, 5.000000000000000e-001
igualmente probable que se genere por rand?
El
rand
de Matlab usa Mersenne Twister rng, que tiene un período de(2^19937-1)/2
, pero solo hay alrededor de2^64
dp fpns. Explique.Encuentre la precisión doble IEEE más pequeña fpn
x
,1 < x < 2
, tal quex*(1/x) ~= 1
.Escriba una función corta de Matlab para buscar dicho número.
Respuesta: Alan Edelman, MIT¿Volarías en un avión cuyo software fue escrito por ti?
Saludos,
Derek O''Connor
Colin K no me contrataría (y probablemente me despidiera) por decir "que el tipo de datos principal (¿solo?) De Matlab es la matriz de coma flotante de doble precisión".
Cuando Matlab comenzó eso fue todo lo que el usuario vio, pero a lo largo de los años han agregado lo que tímidamente llaman ''clases de almacenamiento'': simple, (u) int8, 16, 32, y otros. Pero estos no son realmente tipos porque no se puede hacer una aritmética ÚTIL sobre ellos. La aritmética en estas clases de almacenamiento es tan lenta que son inútiles como tipos. Sí, ahorran espacio de almacenamiento, pero ¿de qué sirve si no puedes hacer nada que valga la pena con ellos?
Ver mi publicación (No. 13) aquí:
donde muestro que la aritmética en int32s es 12 veces más lenta que la aritmética doble y donde MathWorkser Loren Shure dice "Por defecto, las variables MATLAB son matrices de doble precisión. En los viejos tiempos, estos eran los ÚNICOS tipos de matrices en MATLAB. las matrices se almacenaron como valores dobles ".
Para mí, el mayor defecto en Matlab es su falta de tipos adecuados, como los disponibles en C y Fortran.
Por cierto, Colin, ¿cuál fue tu respuesta a la pregunta 14?
Derek O''Connor
Depende un poco lo que quieras probar.
Para probar la fluidez de MATLAB , hay varias preguntas agradables de desbordamiento de pila que podría usar para probar, por ejemplo, manipulaciones de matriz ( ejemplo 1 , ejemplo 2 ), o podría usar soluciones, como esta pregunta (admito, me gusta mucho ese), o busca en esta lista algunas cosas altamente específicas de MATLAB. Si quieres ser un poco mezquino, lanza una pregunta como esta , donde la mejor solución es un ciclo, y la típica solución de pensamiento de MATLAB simplemente llenaría la memoria.
Sin embargo, puede ser más útil formular preguntas de programación más generales relacionadas con su área de trabajo y ver si resuelven el problema con MATLAB.
Por ejemplo, dado que hago análisis de imágenes, puedo pedirles que diseñen una clase para cargar imágenes de diferentes formatos (un experto de MATLAB debería saber cómo hacer OOP, después de todo, ha estado fuera durante dos años), y luego preguntar seguimientos sobre cómo tratar con imágenes de gran tamaño (quiero ver qué cantidad de memoria se utilizará -o tal vez conozcan memory.m
y sobre cómo MATLAB generalmente funciona con dobles), etc.
Esto es un poco subjetivo, pero voy a morder ...;)
Para alguien que es un experto en MATLAB autoproclamado, estas son algunas de las cosas que personalmente espero que puedan ilustrar en una entrevista:
- Cómo utilizar los operadores aritméticos para operaciones de matriz o elemento.
- Una familiaridad con todos los tipos de datos básicos y cómo convertir sin esfuerzo entre ellos.
- Una comprensión completa de la indexación y asignación de la matriz, ya sea lógica, lineal o indizada por suscripciones (básicamente, todo en esta página de la documentación ).
- Una capacidad para manipular matrices multidimensionales .
- La comprensión y el uso regular de optimizaciones como preallocation y vectorization .
- Una comprensión de cómo manejar archivos de E / S para una cantidad de situaciones diferentes.
- Una familiaridad con los gráficos de manejo y todas las capacidades básicas de trazado .
Un conocimiento íntimo de los tipos de funciones en MATLAB , en particular funciones anidadas . Específicamente, dada la siguiente función:
function fcnHandle = counter value = 0; function currentValue = increment value = value+1; currentValue = value; end fcnHandle = @increment; end
Deberían poder decirle cuál será el contenido de la
output
variable en el siguiente código, sin ejecutarlo en MATLAB:>> f1 = counter(); >> f2 = counter(); >> output = [f1() f1() f2() f1() f2()]; %# WHAT IS IT?!
Haga preguntas sobre su experiencia y experiencia en la aplicación de MATLAB en su dominio.
Haga preguntas sobre cómo abordaría el diseño de una aplicación para su implementación en MATLAB. Si se refiere a las características recientes de MATLAB, pídale que las explique, y cómo son diferentes de las funciones anteriores que reemplazan o complementan, y por qué son preferibles (o no).
Haga preguntas sobre su experiencia con las estructuras de datos de MATLAB. Muchos de los "expertos" de MATLAB con los que me he encontrado son muy buenos para escribir códigos, pero son muy pobres para determinar cuáles son las mejores estructuras de datos para el trabajo en cuestión. Esto es a menudo una consecuencia directa de que sean expertos en el dominio que han recogido MATLAB en lugar de haber sido entrenados en informática. El resultado es a menudo un buen código que tiene que compensar las estructuras de datos incorrectas.
Haga preguntas sobre su experiencia, si la hay, con otros lenguajes / sistemas e invítelo a ampliar sus observaciones sobre las fortalezas y debilidades relativas de MATLAB.
Solicite los mejores consejos para optimizar los programas de MATLAB. Espere las respuestas: vectorización, preasignación, borrado de variables no utilizadas, etc.
Pregunte sobre su familiaridad con las herramientas de perfilador, depurador y lint MATLAB. Recientemente descubrí que el "experto" de MATLAB en la esquina aquí nunca, en 10 años usando la herramienta, encontró el generador de perfiles.
Eso debería hacerte comenzar.
I. Creo que esta reciente pregunta sobre la indexación es una muy buena pregunta para un "experto".
Tengo una matriz 2D, llámala ''A''. Tengo otras dos matrices en 2D, llámalas ''ix'' e ''iy''. Me gustaría crear una matriz de salida cuyos elementos son los elementos de A en los pares de índices proporcionados por x_idx y y_idx. Puedo hacer esto con un ciclo de la siguiente manera:
for i=1:nx for j=1:ny output(i,j) = A(ix(i,j),iy(i,j)); end end
¿Cómo puedo hacer esto sin el bucle? Si hago output = A (ix, iy), obtengo el valor de A en todo el rango de (ix) X (iy).
II. Conocimiento básico de operadores como la multiplicación por elementos entre dos matrices ( .*
).
III. Indización lógica: genere una matriz simétrica aleatoria con valores de 0-1
y establezca todos los valores superiores a T
en 0.
IV. Lea un archivo con algunos datos formateados correctamente en una matriz ( importdata
)
V. Aquí hay otra pregunta dulce SO
Tengo tres matrices de 1-d donde los elementos son algunos valores y quiero comparar cada elemento en una matriz con todos los elementos en otras dos.
Por ejemplo:
a=[2,4,6,8,12] b=[1,3,5,9,10] c=[3,5,8,11,15]
Quiero saber si hay los mismos valores en diferentes matrices (en este caso hay 3,5,8)
Por cierto , hay una excelente posibilidad de que su entrevistada Google "preguntas de la entrevista MATLAB" y vea esta publicación :)
Posible pregunta: Tengo una matriz A de n R, G, B trillizos. Es una matriz 3xn. Tengo otra matriz B en la forma 1xn que almacena un valor de índice (asociación a un clúster) para cada triplete.
¿Cómo trazo los trillizos de A en el espacio 3D (usando la función de plot3
), coloreando cada triplete de acuerdo con su índice en B? (El objetivo es evaluar cualitativamente mi agrupamiento)
Realmente, los programadores realmente buenos que son principiantes de MATLAB no podrán brindarle una solución eficiente (== Estilo de MATLAB). Sin embargo, es un problema muy simple si conoce su MATLAB.
Tenemos varias personas nuevas en el departamento de soporte técnico aquí en MathWorks. Esto es todo después de la contratación (no estoy involucrado en la contratación), pero me gusta conocer gente, así que les doy el "Desafío de programación MATLAB Imposible y Adaptativo"
Comienzo con ellos en MATLAB y les doy algún archivo .MAT con datos en él. Les pido que lo analicen, sin más instrucciones. Puedo obtener una idea muy rápida de su experiencia real.
http://blogs.mathworks.com/videos/2008/07/02/puzzler-data-exploration/
El desafío real no significa mucho de nada, aprendo más al verlos intentarlo.
¿Están haciendo scripts, funciones, línea de comandos o GUI? ¿Parecen tener una idea clara de a dónde van con eso? ¿Qué nivel de confianza tienen con lo que están haciendo?
Son informáticos o un ingeniero que aprendió a programar. Las especializaciones de CS tienden a hacer cosas como cerrar el paréntesis de inmediato, y otras pequeñas optimizaciones como esa. Las personas que han estado usando MATLAB durante un tiempo tienden a capturar las asas de los comandos de trazado para su uso posterior.
¿Qué tan rápido navegan por la documentación? Una vez que veo que están yendo por el camino "correcto", simplemente voy a cambiar el desafío para ver qué tan rápido pueden hacer tramas, extraer submatrices, etc.
Lanzaré algunas cosas viejas del Proyecto Euler. En su mayoría solo aumentan las preguntas hasta que uno de nosotros se queda perplejo.