Equivalents Codes in Julia, MATLAB, Python, and R
Overview
Organizing code that performs the same function in Julia, Matlab, Python, and R.
Let’s assume the following environment for Python.
import numpy as np
General
| Julia | Matlab | Python | R |
| comment | |||
| #comment | %comment | #comment | #comment |
| 2d grid | |||
| X = kron(x, ones(size(y)))Y = kron(ones(size(x)), y) | [X,Y] = meshgrid(x,y) | np.meshgrid(x,y) | |
Type
| 줄리아Julia | 매트랩Matlab | 파이썬Python | R |
| type of elements | |||
| eltype(x) | x.dtype | ||
| changing type of elements | |||
| convert(Array{Float64},x) | x.astype("float64") | ||
| type of x | |||
| typeof(x) | type(x)#class of x | ||
Vector
| 줄리아Julia | 매트랩Matlab | 파이썬Python | R |
| column vector | |||
| [1 4 -1 2] | [1;4;-1;2] | np.array([1,4,-1,2]).reshape(-1,1) | |
| Row vector | |||
| [1;; 4;; -1;; 2]or[1 4 -1 2]' | [1 4 -1 2]or[1,4,-1,2] | np.array([1,4,-1,2]) | |
| Zero vector | |||
| zeros(n)#column vector | zeros(n,1)#not zeros(n)#zeros(n)=zeros(n,n) | np.zeros(n)#row vector | matrix(0,n) |
| Vector with only ones | |||
| ones(n)#column vector | ones(n,1)#not ones(n)#ones(n)=ones(n,n) | np.ones(n)#row vector | |
| n equally spaced samples (length-based) | |||
| range(0,stop=1,length=10)orLinRange(0,1,10) | linspace(0,1,10)#row vector | np.linspace(0,stop=1,num=10)#row vector | |
| n equally spaced samples (interval-based) | |||
| range(0, stop=1, step=0.1) | 0 : 0.1 : 1 | np.arange(0,1.001,0.1) | |
| n logarithmically spaced samples | |||
| 10 .^range(0,1,10) | logspace(0,1,10)#row vector | np.logspace(0,stop=1,num=10,base=10)#row vector | |
Matrix
| 줄리아Julia | 매트랩Matlab | 파이썬Python | R |
| zero matrix | |||
| zeros(m,n) | zeros(m,n) | np.zeros([m,n]) | matrix(0,m,n) |
| flatten | |||
| vec(x) | x(:) | np.ravel(x) | |
| return zeros with the same shape and dtype as a given x | |||
| zero(x) | np.zeros_like(x) | ||
| return ones with the same shape and dtype as a given x | |||
| fill!(similar(x), 1) | np.ones_like(x) | ||
| dimensions | |||
| ndims(x) | ndims(x) | x.ndim | |
| size of matrix | |||
| size(x) | size(x) | x.shape | |
| number of elements | |||
| length(x) | numel(x) | x.size | |
| length of largest dimension | |||
| maximum(size(x)) | length(x) | max(x.shape) | |
Random Sampling
| 줄리아Julia | 매트랩Matlab | 파이썬Python | R |
| Uniformly distributed random vector | |||
| rand(n)#column vector | rand(n,1)#not rand(n)#rand(n)=rand(n,n) | np.random.rand(n)#row vector | |
| Uniformly distributed random matrix | |||
| rand(m,n) | rand(m,n) | np.random.rand(m,n) | |
| Normally distributed random numbers | |||
| randn(m,n) | randn(m,n) | np.random.randn(m,n) | |
Fourier Transform
Let’s assume the following environment for Julia.
using FFTW
| 줄리아Julia | 매트랩Matlab | 파이썬Python | R |
| Fourier transform | |||
| fft(x) | fft(x) | np.fft.fft(x) | fft(x) |
| Inverse Fourier transform | |||
| ifft(x) | ifft(x) | np.fft.ifft(x) | fft(y,inverse=TRUE)/length(y) |
Interpolation
Let’s assume the following environment for Python.
from scipy.interpolate import griddata
Let’s consider $X, Y, P, Z$ as a 2D array and $x, y$ as a 1D array.
| 줄리아Julia | 매트랩Matlab | 파이썬Python | R |
| 2D interpolation | |||
| Z=interp2(X,Y,P,x,y) | Z=griddata((np.ravel(X),np.ravel(Y)),np.ravel(P),(x,y)) | ||
Visualization
Let’s assume the following environment for Julia.
using Plots
Let’s assume the following environment for Python.
import matplotlib.pyplot as plt
Let’s consider $A$ as the array to output as a 2D image.
| 줄리아Julia | 매트랩Matlab | 파이썬Python | R |
| Set scale range | |||
| heatmap(A,clim=(a,b)) | plt.imshow(A)plt.colorbar()plt.clim(a,b) | ||
| Horizon line | |||
| hline!(a) | plt.axhline(a) | ||
| Vertical line | |||
| vline!(a) | plt.axvline(a) | ||
