sub2ind() errors out with NaN inputs - handled differently since R2024a

9 visualizaciones (últimos 30 días)
>> matlabRelease
ans =
matlabRelease with properties:
Release: "R2022b"
Stage: "release"
Update: 3
Date: 17-Nov-2022
>> sub2ind([ 3 5 7], [ 3 3], [2 2], [1 nan])
ans =
6 NaN
versus
>> matlabRelease
ans =
matlabRelease with properties:
Release: "R2024b"
Stage: "release"
Update: 4
Date: 26-Dec-2024
>> sub2ind([ 3 5 7], [ 3 3], [2 2], [1 nan])
Error using sub2ind (line 71)
Out of range subscript.
  2 comentarios
Walter Roberson
Walter Roberson el 4 de Mzo. de 2025
That change probably came with R2024a, which had the following documented change to sub2ind:
The sub2ind (R2024a) function now supports scalar expansion and accepts a mix of scalars and vectors for subscript inputs. For example, sub2ind(sz,[1 2 3],2) is now the same as sub2ind(sz,[1 2 3],[2 2 2]). Previously, the subscript inputs were required to be the same size.
Eric Machorro
Eric Machorro el 4 de Mzo. de 2025
I suspect you are correct - but then the issue is that R2024a added some nice functionality, yet removed a minor aspect of its backward compatibility. If that removal wasn't intentional, maybe it could be undone? Either way I would think it should be documented or fixed in subsequent release.

Iniciar sesión para comentar.

Respuesta aceptada

Matt J
Matt J el 4 de Mzo. de 2025
You can get the old behavior back if you need it,
Sub2Ind([ 3 5 7], [ 3 3], [2 2], [1 nan])
ans = 1×2
6 NaN
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
function out=Sub2Ind(sz,varargin)
out=varargin{1};
for i=2:numel(varargin)
out=out+(varargin{i}-1)*(sz(i-1));
end
end
  1 comentario
Eric Machorro
Eric Machorro el 7 de Mzo. de 2025
Thank you - looking at the original code for this , i would've expected something way more complicated. Thank you very much.

Iniciar sesión para comentar.

Más respuestas (1)

Steven Lord
Steven Lord el 4 de Mzo. de 2025
This was a bug fix introduced in release R2024a.
  3 comentarios
Steven Lord
Steven Lord el 7 de Mzo. de 2025
Generally, my mental model for the workflow for sub2ind (from the name) is that what comes out ought to be a valid linear index into an array that selects the same element as the subscripts you passed into the function. NaN is neither a valid subscript nor a valid linear index. Nor is 0.
I = sub2ind([10 10], 1, 0)
Error using sub2ind (line 71)
Out of range subscript.
Perhaps the error message could be more descriptive.
Eric Machorro
Eric Machorro el 7 de Mzo. de 2025
That is one way to handle it. And I agree that is a rather uninformative error message. But, it is a little deeper than that I think. If, by off chance, it it fed in a nan value, it could (and did prior to R2024a) return a nan for the appropriate index. The newer version removed that functionality, but added another facet of funcationality in being able to handle inputs of different sizes.
This would provide a higher degree of backward compatibility it would seem. But perhaps I am missing something. Not a major deal I suppose.

Iniciar sesión para comentar.

Categorías

Más información sobre Startup and Shutdown en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2024b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by