Tudor Berariu
Tudor Berariu

Reputation: 4910

Multiple assignment in multidimensional array

I have a 4x4 array of zeros.

julia> X = zeros(4,4)
4x4 Array{Float64,2}:
 0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0

I have an 2xN array containing indices of elements in X that I want to assign a new value.

julia> ind = [1 1; 2 2; 3 3]
3x2 Array{Int64,2}:
 1  1
 2  2
 3  3

What is the simplest way to assign a value to all elements in X whose indices are rows in ind? (something like X[ind] = 2.0).

julia> X
 2.0  0.0  0.0  0.0
 0.0  2.0  0.0  0.0
 0.0  0.0  2.0  0.0
 0.0  0.0  0.0  0.0

Upvotes: 2

Views: 137

Answers (2)

user4235730
user4235730

Reputation: 2619

user3467349's answer is correct, but inefficient, because it allocates an Array for the indices. Also, the notation [a:b] is deprecated as of Julia 0.4. Instead, you can use:

for i = 1:size(ind, 1)
  a, b = ind[i, :]
  X[a, b] = 2.0
end

Upvotes: 3

user3467349
user3467349

Reputation: 3191

I'm not sure there is a non-looping way to do this. What's wrong with this?

for i=[1:size(ind)[1]] 
    a, b = ind[i, :]  
    X[a, b] = 2.0
end

Upvotes: 3

Related Questions