# I'm converting a Python/NumPy program into Julia

**URL:** <https://discourse.julialang.org/t/im-converting-a-python-numpy-program-into-julia/2316>\
**Category:** New to Julia\
**Created:** [February 26, 2017, 10:47am UTC](https://discourse.julialang.org/t/im-converting-a-python-numpy-program-into-julia/2316 "2017-02-26T10:47:33Z")\
**Posts on this page:** 18\
**Page:** 1

<div class="post-metadata">

**Author:** ![JuliaCaesar](https://avatars.discourse-cdn.com/v4/letter/j/ac8455/32.png) [@JuliaCaesar](https://discourse.julialang.org/u/JuliaCaesar)\
**Post date:** [February 26, 2017, 10:47am UTC](https://discourse.julialang.org/t/im-converting-a-python-numpy-program-into-julia/2316/1 "2017-02-26T10:47:33Z")

</div>

Hi,

first post here, hello everybody.

I would like to convert bits of code into Julia.

Python :

```julia
import numpy as np
import matplotlib.pyplot as plt

rot = np.array([[0.90, -0.30], [0.30, 0.90]])
sca = np.array([[3.4, 0], [0, 2]])

np.random.seed(150)
cd = (np.random.randn(100,2)).dot(sca).dot(rot)

```

I went here so far :

```julia
rot = [[0.90, -0.30], [0.30, 0.90]]
sca = [[3.4, 0], [0, 2]]

srand(150)
cd = (randn(100,2))

```

But I’m unable to apply rotation and scatter to cd because I can’t apply dot() to cd.

Any hint is welcome

---

<div class="post-metadata">

**Author:** ![dfdx](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dfdx/32/120_2.png) [@dfdx](https://discourse.julialang.org/u/dfdx)\
**Post date:** [February 26, 2017, 11:36am UTC](https://discourse.julialang.org/t/im-converting-a-python-numpy-program-into-julia/2316/2 "2017-02-26T11:36:05Z")

</div>

Try this:

```julia
# in Julia, syntax for matrix literals is more similar to Matlab's 
# rather than NumPy's:
rot = [0.90 -0.30; 0.30 0.90]
# 2×2 Array{Float64,2}:
# 0.9 -0.3
# 0.3 0.9

sca = [3.4 0; 0 2]
# 2×2 Array{Float64,2}:
# 3.4 0.0
# 0.0 2.0

srand(150)

# `dot` for matrix arguments in NumPy is just matrix multiplication in Julia:
cd = rand(100, 2) * sca * rot
# 100×2 Array{Float64,2}:
# 1.26191 1.35444  
# 3.13555 0.564228 
# ⋮                   
# 2.33887 0.69385  
# 2.03997 0.491    

```

---

<div class="post-metadata">

**Author:** ![JuliaCaesar](https://avatars.discourse-cdn.com/v4/letter/j/ac8455/32.png) [@JuliaCaesar](https://discourse.julialang.org/u/JuliaCaesar)\
**Post date:** [February 26, 2017, 3:41pm UTC](https://discourse.julialang.org/t/im-converting-a-python-numpy-program-into-julia/2316/3 "2017-02-26T15:41:01Z")

</div>

Worked fine, thanks.

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [February 26, 2017, 4:00pm UTC](https://discourse.julialang.org/t/im-converting-a-python-numpy-program-into-julia/2316/4 "2017-02-26T16:00:44Z")

</div>

[http://docs.julialang.org/en/stable/manual/noteworthy-differences/#noteworthy-differences-from-python](http://docs.julialang.org/en/stable/manual/noteworthy-differences/#noteworthy-differences-from-python)

---

<div class="post-metadata">

**Author:** ![JuliaCaesar](https://avatars.discourse-cdn.com/v4/letter/j/ac8455/32.png) [@JuliaCaesar](https://discourse.julialang.org/u/JuliaCaesar)\
**Post date:** [February 26, 2017, 6:51pm UTC](https://discourse.julialang.org/t/im-converting-a-python-numpy-program-into-julia/2316/5 "2017-02-26T18:51:25Z")

</div>

Thanks for the link.

I’m now stuck at plotting.  
Python follow-up:

```julia
cd1 = np.random.randn(25,2)+[-10, 2]
cd2 = np.random.randn(25,2)+[-7, -2]
data = np.concatenate((cd, cd1, cd2,))
l1c = np.ones(100, dtype=int)
l2c = np.zeros(100, dtype=int)
labels = np.concatenate((l1c, l2c))
cm = np.array(['r','g'])
plt.scatter(data[:,0],data[:,1],c=cm[labels],s=50,edgecolors='none')
plt.show()

```

Julia follow-up:

```julia
...
cd = randn(100,2) * sca * rot
cd1 = randn(25,2) .+ [-10 2]
cd2 = randn(25,2) .+ [-7 -2]
data = cat(1, cd, cd1, cd2)
l1c = ones(Int, 100)
l2c = zeros(Int, 100)
labels = cat(1, l1c, l2c)
cm =['r';'g']

```

I tried various ways without success, including using Pyplot, but I’d like to stay away from Python technology.

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [February 26, 2017, 7:52pm UTC](https://discourse.julialang.org/t/im-converting-a-python-numpy-program-into-julia/2316/6 "2017-02-26T19:52:51Z")

</div>

Give Plots.jl a try.

---

<div class="post-metadata">

**Author:** ![JuliaCaesar](https://avatars.discourse-cdn.com/v4/letter/j/ac8455/32.png) [@JuliaCaesar](https://discourse.julialang.org/u/JuliaCaesar)\
**Post date:** [February 26, 2017, 8:08pm UTC](https://discourse.julialang.org/t/im-converting-a-python-numpy-program-into-julia/2316/7 "2017-02-26T20:08:17Z")

</div>

I did, but I’m unable to reproduce what the Python code does.

---

<div class="post-metadata">

**Author:** ![mkborregaard](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkborregaard/32/556_2.png) [@mkborregaard](https://discourse.julialang.org/u/mkborregaard)\
**Post date:** [February 26, 2017, 8:45pm UTC](https://discourse.julialang.org/t/im-converting-a-python-numpy-program-into-julia/2316/8 "2017-02-26T20:45:57Z")

</div>

What does the Python code do?

---

<div class="post-metadata">

**Author:** ![JuliaCaesar](https://avatars.discourse-cdn.com/v4/letter/j/ac8455/32.png) [@JuliaCaesar](https://discourse.julialang.org/u/JuliaCaesar)\
**Post date:** [February 26, 2017, 9:23pm UTC](https://discourse.julialang.org/t/im-converting-a-python-numpy-program-into-julia/2316/9 "2017-02-26T21:23:00Z")

</div>

It plots this:

 ![](https://global.discourse-cdn.com/julialang/original/3X/9/4/94e0b27163283af9b4838ef2f3e296761819f05c.png)

---

<div class="post-metadata">

**Author:** ![mkborregaard](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkborregaard/32/556_2.png) [@mkborregaard](https://discourse.julialang.org/u/mkborregaard)\
**Post date:** [February 26, 2017, 9:24pm UTC](https://discourse.julialang.org/t/im-converting-a-python-numpy-program-into-julia/2316/10 "2017-02-26T21:24:37Z")

</div>

You might try

```julia
using Plots
scatter(data[:,0], data[:,1], color = [:red :green], groups = labels, markersize=5, markerstrokewidth = 0)

```

(or replace `color` with `c`, `markersize` with `ms` and `markerstrokewidth` with `msw`, doesn’t matter).

---

<div class="post-metadata">

**Author:** ![JuliaCaesar](https://avatars.discourse-cdn.com/v4/letter/j/ac8455/32.png) [@JuliaCaesar](https://discourse.julialang.org/u/JuliaCaesar)\
**Post date:** [February 26, 2017, 10:23pm UTC](https://discourse.julialang.org/t/im-converting-a-python-numpy-program-into-julia/2316/11 "2017-02-26T22:23:39Z")

</div>

I get an error :

```julia
julia> scatter(data[:,0], data[:,1], color = [:red :green], groups = labels, markersize=5, markerstrokewidth = 0)
ERROR: BoundsError: attempt to access 150x2 Array{Float64,2}:

```

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [February 26, 2017, 10:33pm UTC](https://discourse.julialang.org/t/im-converting-a-python-numpy-program-into-julia/2316/12 "2017-02-26T22:33:07Z")

</div>

Change the indexing to 1 based, I.e 1 and 2

---

<div class="post-metadata">

**Author:** ![JuliaCaesar](https://avatars.discourse-cdn.com/v4/letter/j/ac8455/32.png) [@JuliaCaesar](https://discourse.julialang.org/u/JuliaCaesar)\
**Post date:** [February 26, 2017, 10:34pm UTC](https://discourse.julialang.org/t/im-converting-a-python-numpy-program-into-julia/2316/13 "2017-02-26T22:34:34Z")

</div>

Thought of it but same:

```julia
julia> scatter(data[:,1], data[:,2], color = [:red :green], groups = labels, markersize=5, markerstrokewidth = 0)

[Plots.jl] Initializing backend: pyplot
INFO: Precompiling module PyPlot.
/usr/lib64/python2.7/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.
  warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')
ERROR: BoundsError: attempt to access 150-element Array{Float64,1}:

```

---

<div class="post-metadata">

**Author:** ![mkborregaard](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkborregaard/32/556_2.png) [@mkborregaard](https://discourse.julialang.org/u/mkborregaard)\
**Post date:** [February 26, 2017, 10:37pm UTC](https://discourse.julialang.org/t/im-converting-a-python-numpy-program-into-julia/2316/14 "2017-02-26T22:37:16Z")

</div>

That’s because your labels vector is 200 long, data is only 150.

---

<div class="post-metadata">

**Author:** ![JuliaCaesar](https://avatars.discourse-cdn.com/v4/letter/j/ac8455/32.png) [@JuliaCaesar](https://discourse.julialang.org/u/JuliaCaesar)\
**Post date:** [February 26, 2017, 10:47pm UTC](https://discourse.julialang.org/t/im-converting-a-python-numpy-program-into-julia/2316/15 "2017-02-26T22:47:47Z")

</div>

Oh I see, I corrected it it’s now working !  
Thanks, this is helpful.

---

<div class="post-metadata">

**Author:** ![dpsanders](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dpsanders/32/3573_2.png) [@dpsanders](https://discourse.julialang.org/u/dpsanders)\
**Post date:** [February 26, 2017, 11:28pm UTC](https://discourse.julialang.org/t/im-converting-a-python-numpy-program-into-julia/2316/16 "2017-02-26T23:28:47Z")

</div>

Please report the whole error message in future.

---

<div class="post-metadata">

**Author:** ![JuliaCaesar](https://avatars.discourse-cdn.com/v4/letter/j/ac8455/32.png) [@JuliaCaesar](https://discourse.julialang.org/u/JuliaCaesar)\
**Post date:** [February 27, 2017, 12:30am UTC](https://discourse.julialang.org/t/im-converting-a-python-numpy-program-into-julia/2316/17 "2017-02-27T00:30:12Z")

</div>

Ok.

Now I’m trying to split the data.  
Python:

```julia
X_train1, X_test1, y_train1, y_test1 = train_test_split(data, labels, test_size=0.33)

```

Julia:

```julia
(X_train1, X_test1), (y_train1, y_test1) = splitdata(data, labels; at = 0.33)
ERROR: AssertionError: nobs(X) == nobs(y)
 in splitdata at /home/me/.julia/v0.4/MLDataUtils/src/datasplits/splitdata.jl:34

```

I don’t get it as data type/dimensions seems coherent:

```julia
julia> typeof(data)
Array{Float64,2}
julia> data
200x2 Array{Float64,2}:

julia> typeof(labels)
Array{Int64,1}
ulia> labels
200-element Array{Int64,1}:

```

---

<div class="post-metadata">

**Author:** ![JuliaCaesar](https://avatars.discourse-cdn.com/v4/letter/j/ac8455/32.png) [@JuliaCaesar](https://discourse.julialang.org/u/JuliaCaesar)\
**Post date:** [February 27, 2017, 3:33am UTC](https://discourse.julialang.org/t/im-converting-a-python-numpy-program-into-julia/2316/18 "2017-02-27T03:33:20Z")

</div>

Looks like I had to transpose the data matrix as now this works :  
(X\_train1, X\_test1), (y\_train1, y\_test1) = splitdata(transpose(data), labels; at = 0.33)
