# Basic questions when migrating from matlab to julia

**URL:** <https://discourse.julialang.org/t/basic-questions-when-migrating-from-matlab-to-julia/87658>\
**Category:** New to Julia\
**Created:** [September 22, 2022, 4:44pm UTC](https://discourse.julialang.org/t/basic-questions-when-migrating-from-matlab-to-julia/87658 "2022-09-22T16:44:28Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Muhammad\_Nadeem](https://avatars.discourse-cdn.com/v4/letter/m/bc79bd/32.png) [@Muhammad\_Nadeem](https://discourse.julialang.org/u/Muhammad_Nadeem)\
**Post date:** [September 22, 2022, 4:44pm UTC](https://discourse.julialang.org/t/basic-questions-when-migrating-from-matlab-to-julia/87658/1 "2022-09-22T16:44:28Z")

</div>

Hello all,

I have a Matrix

M = [1 2 3; 3 2 1]

In julia if i want to extract the first row of the matrix then i am using

M1 = M[1, :]

But since i am extracting 1st row then M1 should remain a row vector 1x3, but it isnt it becomes a column vector 3x1? How can i fix it? Thank you 🙂

---

<div class="post-metadata">

**Author:** ![lmiq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lmiq/32/18314_2.png) [@lmiq](https://discourse.julialang.org/u/lmiq)\
**Post date:** [September 22, 2022, 4:49pm UTC](https://discourse.julialang.org/t/basic-questions-when-migrating-from-matlab-to-julia/87658/2 "2022-09-22T16:49:41Z")

</div>

These are some options:

```julia
julia> m1 = M[1,:]'
1×3 adjoint(::Vector{Int64}) with eltype Int64:
 1 2 3

julia> m1 = reshape(M[1,:], 1, 3)
1×3 Matrix{Int64}:
 1 2 3

```

---

<div class="post-metadata">

**Author:** ![pdeffebach](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pdeffebach/32/10320_2.png) [@pdeffebach](https://discourse.julialang.org/u/pdeffebach)\
**Post date:** [September 22, 2022, 4:56pm UTC](https://discourse.julialang.org/t/basic-questions-when-migrating-from-matlab-to-julia/87658/3 "2022-09-22T16:56:08Z")

</div>

Easiest option is index with a vector

```julia
julia> M = [1 2 3; 3 2 1]
2×3 Matrix{Int64}:
 1 2 3
 3 2 1

julia> M[[1], :]
1×3 Matrix{Int64}:
 1 2 3

```

---

<div class="post-metadata">

**Author:** ![Muhammad\_Nadeem](https://avatars.discourse-cdn.com/v4/letter/m/bc79bd/32.png) [@Muhammad\_Nadeem](https://discourse.julialang.org/u/Muhammad_Nadeem)\
**Post date:** [September 22, 2022, 5:10pm UTC](https://discourse.julialang.org/t/basic-questions-when-migrating-from-matlab-to-julia/87658/4 "2022-09-22T17:10:49Z")

</div>

Hello all,

I am defining a vector like this

A = 1:9

A= A’ # A is row vector of 9 elements from 1:9

Now i am replacing 3 element of A, then i am doing

A[2] = 12 ( in matlab i can do this but in julia it is giveing me error)

But it is giving me error, Can anyone help me here?

Thanks

---

<div class="post-metadata">

**Author:** ![gustaphe](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gustaphe/32/18174_2.png) [@gustaphe](https://discourse.julialang.org/u/gustaphe)\
**Post date:** [September 22, 2022, 5:22pm UTC](https://discourse.julialang.org/t/basic-questions-when-migrating-from-matlab-to-julia/87658/5 "2022-09-22T17:22:00Z")

</div>

In Matlab, everything is a matrix, and the default “vector” is a `1×n` matrix (though not consistently).

In Julia, we have vectors, which are most similar to an `n×1` matrix, but they are really a different animal. For most things, a vector is actually what you want, you’re probably expecting a matrix because that’s what Matlab uses. Try to get used to Julia instead.

---

<div class="post-metadata">

**Author:** ![DNF](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dnf/32/10191_2.png) [@DNF](https://discourse.julialang.org/u/DNF)\
**Post date:** [September 22, 2022, 5:25pm UTC](https://discourse.julialang.org/t/basic-questions-when-migrating-from-matlab-to-julia/87658/6 "2022-09-22T17:25:56Z")

</div>

> [@pdeffebach](#):
>
> `M[[1], :]`

Even better:

```julia
M[1:1, :] 

```

---

<div class="post-metadata">

**Author:** ![DNF](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dnf/32/10191_2.png) [@DNF](https://discourse.julialang.org/u/DNF)\
**Post date:** [September 22, 2022, 5:28pm UTC](https://discourse.julialang.org/t/basic-questions-when-migrating-from-matlab-to-julia/87658/7 "2022-09-22T17:28:49Z")

</div>

> [@Muhammad\_Nadeem](#):
>
> A = 1:9

This is a `UnitRange`, which is immutable, it is not an ordinary `Vector`. Even after transposing, it’s still immutable. If you want to change an element, you must turn it into a `Vector` first:

```julia
A = collect(1:9) 
A[3] = 5 #ok 

```

---

<div class="post-metadata">

**Author:** ![Muhammad\_Nadeem](https://avatars.discourse-cdn.com/v4/letter/m/bc79bd/32.png) [@Muhammad\_Nadeem](https://discourse.julialang.org/u/Muhammad_Nadeem)\
**Post date:** [September 22, 2022, 5:33pm UTC](https://discourse.julialang.org/t/basic-questions-when-migrating-from-matlab-to-julia/87658/8 "2022-09-22T17:33:05Z")

</div>

Thank you so much 🙂 🙂

---

<div class="post-metadata">

**Author:** ![zdenek\_hurak](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/zdenek_hurak/32/53118_2.png) [@zdenek\_hurak](https://discourse.julialang.org/u/zdenek_hurak)\
**Post date:** [September 22, 2022, 6:47pm UTC](https://discourse.julialang.org/t/basic-questions-when-migrating-from-matlab-to-julia/87658/9 "2022-09-22T18:47:56Z")

</div>

Perhaps newcomers can appreciate some explanation of what is going on here. Indeed, by defining `A` using the colon notation we get a variable that behaves like a vector (or array):

```julia
julia> A = 1:1000
1:1000

julia> A[9]
9

```

The resulting type is actually very memory economical:

```julia
julia> sizeof(A)
16

```

The trick is that this “array” is not really stored as an array.

In contrast, using `collect` we transform the original variable into a true vector (array):

```julia
julia> B = collect(A)
1000-element Vector{Int64}:
    1
    2
    3
    ⋮
  999
 1000

```

Now, this is occupying a lot more memory:

```julia
julia> sizeof(B)
8000

```

Obviously, every element of the vector is now stored in memory. Only this is equivalent to Matlab array.
