En octave, je peux faire
julia> A = [1 2; 3 4] 2x2 Array{Int64,2}: 1 2 3 4 julia> A[A>1] -= 1 ERROR: `isless` has no method matching isless(::Int64, ::Array{Int64,2}) in > at operators.jl:33
3 Réponses :
Votre problème n'est pas avec l'affectation, en soi, c'est que mise à jour: p> Notez que dans la Julia moderne (> = 0,7), nous Besoin d'utiliser a> 1 code> ne fonctionne pas. Vous pouvez utiliser l'élément
a.> 1 code> à la place:
. Code> Pour dire que nous voulons diffuser l'action (ici, soustrayez par le scalaire 1000) pour correspondre à la taille de la cible filtrée à gauche. (Au moment où cette question a été posée à l'origine, nous avions besoin du point dans
a.> 1 code> mais pas dans
.- = p> p>.
Pour que cela fonctionne dans Julia 1.0, il faut changer sinon vous obtiendrez quelque chose comme p> ERREUR: MODYError: Pas de méthode correspondant SetIndex_Shape_Check (:: INT64, :: INT64) P>
blockQuote> p> = code> sur
. = code>. En d'autres termes:
dans julia v1.0 Vous pouvez utiliser le pour des matrices plus grandes, la différence plane autour de 10x Scarpup. P> La raison de l'accélération est que la solution d'indexation logique repose sur la création d'une matrice intermédiaire, tandis que légèrement Une manière ersière de l'écriture est p> Il ne semble pas y avoir de vitesse en utilisant et Voici une autre solution qui est presque aussi rapide: p> et qui évite également les allocations. P> P> remplacer! code> fonction à la place de l'indexation logique, avec des écarts considérables:
remplacer! P>
min code>, cependant. p>