GOOGLE ADS

samedi 16 avril 2022

Comment insérer un élément à une position spécifique d'un vecteur vide ?

Dans R, nous pouvons créer un vecteur vide où il est possible d'insérer un élément à n'importe quelle position de ce vecteur. Exemple:

> x <- c()
> x[1] = 10
> x[4] = 20

Le résultat final est:

> x
[1] 10 NA NA 20

Je voudrais faire quelque chose de similaire en utilisant Julia, mais je n'ai pas trouvé de moyen de le faire. La fonction "append" n'effectue pas quelque chose comme ça.

Quelqu'un pourrait-il aider?


Solution du problème

Vous devez le faire en deux étapes :

  • Redimensionnez d'abord le vecteur ou créez un vecteur avec une taille appropriée.

  • Définissez ensuite les éléments en conséquence.

  • Puisque vous venez de RI, supposez que vous voulez que le vecteur soit initialement rempli de valeurs manquantes. Voici comment procéder.

    Dans mon exemple, je suppose que vous souhaitez stocker des entiers dans le vecteur. Avant que les deux options ne chargent le package Missings.jl :

    using Missings

    Option 1. Commencer avec un vecteur vide

    julia> x = missings(Int, 0)
    Union{Missing, Int64}[]
    julia> resize!(x, 4)
    4-element Vector{Union{Missing, Int64}}:
    missing
    missing
    missing
    missing
    julia> x[1] = 10
    10
    julia> x[4] = 40
    40
    julia> x
    4-element Vector{Union{Missing, Int64}}:
    10
    missing
    missing
    40

    Option 2. Préallouer un vecteur

    julia> x = missings(Int, 4)
    4-element Vector{Union{Missing, Int64}}:
    missing
    missing
    missing
    missing
    julia> x[1] = 10
    10
    julia> x[4] = 40
    40

    La raison pour laquelle Julia ne redimensionne pas automatiquement les vecteurs est par sécurité. Parfois, ce serait utile, mais la plupart du temps, si xest un vecteur vide et que vous l'écrivez x[4] = 40, c'est un bogue dans le code et Julia détecte de tels cas.

    ÉDITER

    Ce que vous pouvez faire, c'est:

    function setvalue(vec::Vector, idx, val)
    @assert idx > 0
    if idx > length(vec)
    resize!(vec, idx)
    end
    vec[idx] = val
    return vec
    end

    Aucun commentaire:

    Enregistrer un commentaire

    Comment utiliseriez-vous .reduce() sur des arguments au lieu d'un tableau ou d'un objet spécifique&nbsp;?

    Je veux définir une fonction.flatten qui aplatit plusieurs éléments en un seul tableau. Je sais que ce qui suit n'est pas possible, mais...