Bien sûr que non! ...Ou est-il? Nous allons faire quelques tests.
Définir x = [10 20 30 40 50]
. Puis l'un des énoncés suivants, comme prévu, donne une erreur dans Matlab (Indice les indices doivent être soit réel des entiers positifs ou partitions logiques contenues):
>> x(1.2)
>> x(-0.3)
>> x([1.4 2 3])
>> x([1.4 2.4 3.4])
>> x([1.4:4])
>> x(end/2)
Cependant, les valeurs non entières sont acceptées dans le côlon indices. Tous les travaux suivants dans les dernières versions de Matlab, mais avec un avertissement (opérandes Entiers sont nécessaires pour le côlon de l'opérateur lorsqu'il est utilisé comme index).
>> x(1.2:3)
ans =
10 20
>> x(0.4:3)
ans =
10 10 20
>> x(0.6:3)
ans =
10 20 30
>> x(1.2:0.7:5)
ans =
10 20 30 30 40 50
>> x(-0.4:3)
ans =
10 10 20 30
Il fonctionne également si le côlon expression inclut end
:
>> x(1.5:end-2)
ans =
20 30
>> x(1.5:end/6:end-1)
ans =
20 20 30 40
D'autre part, les opérations suivantes ne fonctionnent pas, et de donner la même erreur que ci-dessus:
>> x(-0.6:2)
>> x(-0.5:2)
Le comportement observé peut être résumée comme suit:
- Certains l'arrondi interne des coups de pied dans quand un colon de l'indice est utilisé. Un colon de l'index est une expression de la forme
a:b
oua:b:c
. Pas d'arrondi a lieu lors de l'indexation de tableau est une gamme standard, telles que l'[a b c]
ou même[a:b]
ou[a:b:c]
. - L'arrondi se fait à l' entier le plus proche, sauf que le nombre entre
-0.5
et0.5
sont spéciaux camelcase: ils sont arrondies au1
au lieu de0
. Bien sûr, si l'entier résultant de l'arrondi est négatif, une erreur se produit.
Un comportement similaire est observée dans les dernières versions d' Octave , sauf que:
-
Apparemment, normal en l'arrondissant à l'entier le plus proche qui est fait, sans le traitement de nombre entre
-0.5
et0.5
comme un cas particulier; et afin de donner un message d'erreur:>> x(0.4:3) >> x(-0.4:3)
Une erreur est émis lorsque la non-intervalle entier contient une seule valeur:
x(2.4:4)
fonctionne, maisx(3.4:4)
n'est pas (bien sûr,x([2.4 3.4])
etx(3.4)
ne fonctionne pas non plus).
Autre que cela, les résultats sont les mêmes que dans Matlab, et un avertissement est également émis (Non entier utilisé comme index).
Les avertissements et le fait qu'Octave fonctionne de la même façon que Matlab suggèrent que c'est l'intention de comportement. Est-il documenté quelque part? Quelqu'un peut-il donner plus d'informations ou faire la lumière sur cette?