Supongamos que tengo una matriz de estructura arr
, donde cada elemento tiene un grupo de campos, incluyendo uno llamado val
. Me gustaría incrementar val
ámbito de cada elemento por una cierta cantidad constante, así:Actualizando un campo en cada elemento de una matriz Matlab struct
for i = 1:length(arr)
arr(i).val = arr(i).val + 3;
end
Esto funciona obviamente, pero me siento debe haber una manera de hacer esto en una sola línea de código (y no por lazo). El mejor que he encontrado es con dos líneas y requiere una variable temporal:
newVals = num2cell([arr.val] + 3);
[arr.val] = deal(newVals{:});
¿Alguna idea? Gracias.
Gracias por la consejo sobre 'trato'. No sabía sobre 'setfield', así que parece hacerlo en una línea, pero como dices, esto es ciertamente peor que la solución for-loop. En cuanto a la indexación de esa manera, la analicé hace un tiempo; Básicamente, Mathworks afirma que el soporte de algo así forzará cambios de compatibilidad al analizador. Lo cual es una pena, ya que me molesta casi cada vez que escribo cualquier código de Matlab. – Carl
¡Gracias por esta respuesta! En MATLAB 2013b, [arr.val] = newVals {:} funciona PERO arr.val = newVals {:}. ¿Qué hacen exactamente los corchetes en este caso? –
'arrayfun' es solo un contenedor para un bucle' for' en MATLAB, por lo que técnicamente todavía está utilizando bucles, aunque disfrazado. – Adriaan