SlideShare a Scribd company logo
2
PythonForDataScience Cheat Sheet
NumPy Basics
Learn Python for Data Science Interactively at www.DataCamp.com
NumPy
DataCamp
Learn Python for Data Science Interactively
The NumPy library is the core library for scientific computing in
Python. It provides a high-performance multidimensional array
object, and tools for working with these arrays.
>>> import numpy as np
Use the following import convention:
Creating Arrays
>>> np.zeros((3,4)) Create an array of zeros
>>> np.ones((2,3,4),dtype=np.int16) Create an array of ones
>>> d = np.arange(10,25,5) Create an array of evenly
spaced values (step value)
>>> np.linspace(0,2,9) Create an array of evenly
spaced values (number of samples)
>>> e = np.full((2,2),7) Create a constant array
>>> f = np.eye(2) Create a 2X2 identity matrix
>>> np.random.random((2,2)) Create an array with random values
>>> np.empty((3,2)) Create an empty array
Array Mathematics
>>> g = a - b Subtraction
array([[-0.5, 0. , 0. ],
[-3. , -3. , -3. ]])
>>> np.subtract(a,b) Subtraction
>>> b + a Addition
array([[ 2.5, 4. , 6. ],
[ 5. , 7. , 9. ]])
>>> np.add(b,a) Addition
>>> a / b Division
array([[ 0.66666667, 1. , 1. ],
[ 0.25 , 0.4 , 0.5 ]])
>>> np.divide(a,b) Division
>>> a * b Multiplication
array([[ 1.5, 4. , 9. ],
[ 4. , 10. , 18. ]])
>>> np.multiply(a,b) Multiplication
>>> np.exp(b) Exponentiation
>>> np.sqrt(b) Square root
>>> np.sin(a) Print sines of an array
>>> np.cos(b) Element-wise cosine
>>> np.log(a) Element-wise natural logarithm
>>> e.dot(f) Dot product
array([[ 7., 7.],
[ 7., 7.]])
Subsetting, Slicing, Indexing
>>> a.sum() Array-wise sum
>>> a.min() Array-wise minimum value
>>> b.max(axis=0) Maximum value of an array row
>>> b.cumsum(axis=1) Cumulative sum of the elements
>>> a.mean() Mean
>>> b.median() Median
>>> a.corrcoef() Correlation coefficient
>>> np.std(b) Standard deviation
Comparison
>>> a == b Element-wise comparison
array([[False, True, True],
[False, False, False]], dtype=bool)
>>> a < 2 Element-wise comparison
array([True, False, False], dtype=bool)
>>> np.array_equal(a, b) Array-wise comparison
1 2 3
1D array 2D array 3D array
1.5 2 3
4 5 6
Array Manipulation
NumPy Arrays
axis 0
axis 1
axis 0
axis 1
axis 2
Arithmetic Operations
Transposing Array
>>> i = np.transpose(b) Permute array dimensions
>>> i.T Permute array dimensions
Changing Array Shape
>>> b.ravel() Flatten the array
>>> g.reshape(3,-2) Reshape, but don’t change data
Adding/Removing Elements
>>> h.resize((2,6)) Return a new array with shape (2,6)
>>> np.append(h,g) Append items to an array
>>> np.insert(a, 1, 5) Insert items in an array
>>> np.delete(a,[1]) Delete items from an array
Combining Arrays
>>> np.concatenate((a,d),axis=0) Concatenate arrays
array([ 1, 2, 3, 10, 15, 20])
>>> np.vstack((a,b)) Stack arrays vertically (row-wise)
array([[ 1. , 2. , 3. ],
[ 1.5, 2. , 3. ],
[ 4. , 5. , 6. ]])
>>> np.r_[e,f] Stack arrays vertically (row-wise)
>>> np.hstack((e,f)) Stack arrays horizontally (column-wise)
array([[ 7., 7., 1., 0.],
[ 7., 7., 0., 1.]])
>>> np.column_stack((a,d)) Create stacked column-wise arrays
array([[ 1, 10],
[ 2, 15],
[ 3, 20]])
>>> np.c_[a,d] Create stacked column-wise arrays
Splitting Arrays
>>> np.hsplit(a,3) Split the array horizontally at the 3rd
[array([1]),array([2]),array([3])] index
>>> np.vsplit(c,2) Split the array vertically at the 2nd index
[array([[[ 1.5, 2. , 1. ],
[ 4. , 5. , 6. ]]]),
array([[[ 3., 2., 3.],
[ 4., 5., 6.]]])]
Also see Lists
Subsetting
>>> a[2] Select the element at the 2nd index
3
>>> b[1,2] Select the element at row 1 column 2
6.0 (equivalent to b[1][2])
Slicing
>>> a[0:2] Select items at index 0 and 1
array([1, 2])
>>> b[0:2,1] Select items at rows 0 and 1 in column 1
array([ 2., 5.])
>>> b[:1] Select all items at row 0
array([[1.5, 2., 3.]]) (equivalent to b[0:1, :])
>>> c[1,...] Same as [1,:,:]
array([[[ 3., 2., 1.],
[ 4., 5., 6.]]])
>>> a[ : :-1] Reversed array a
array([3, 2, 1])
Boolean Indexing
>>> a[a<2] Select elements from a less than 2
array([1])
Fancy Indexing
>>> b[[1, 0, 1, 0],[0, 1, 2, 0]] Select elements (1,0),(0,1),(1,2)and (0,0)
array([ 4. , 2. , 6. , 1.5])
>>> b[[1, 0, 1, 0]][:,[0,1,2,0]] Select a subset of the matrix’s rows
array([[ 4. ,5. , 6. , 4. ], and columns
[ 1.5, 2. , 3. , 1.5],
[ 4. , 5. , 6. , 4. ],
[ 1.5, 2. , 3. , 1.5]])
>>> a = np.array([1,2,3])
>>> b = np.array([(1.5,2,3), (4,5,6)], dtype = float)
>>> c = np.array([[(1.5,2,3), (4,5,6)], [(3,2,1), (4,5,6)]],
dtype = float)
Initial Placeholders
Aggregate Functions
>>> np.loadtxt("myfile.txt")
>>> np.genfromtxt("my_file.csv", delimiter=',')
>>> np.savetxt("myarray.txt", a, delimiter=" ")
I/O
1 2 3
1.5 2 3
4 5 6
Copying Arrays
>>> h = a.view() Create a view of the array with the same data
>>> np.copy(a) Create a copy of the array
>>> h = a.copy() Create a deep copy of the array
Saving & Loading Text Files
Saving & Loading On Disk
>>> np.save('my_array', a)
>>> np.savez('array.npz', a, b)
>>> np.load('my_array.npy')
>>> a.shape Array dimensions
>>> len(a) Length of array
>>> b.ndim Number of array dimensions
>>> e.size Number of array elements
>>> b.dtype Data type of array elements
>>> b.dtype.name Name of data type
>>> b.astype(int) Convert an array to a different type
Inspecting Your Array
>>> np.info(np.ndarray.dtype)
Asking For Help
Sorting Arrays
>>> a.sort() Sort an array
>>> c.sort(axis=0) Sort the elements of an array's axis
Data Types
>>> np.int64 Signed 64-bit integer types
>>> np.float32 Standard double-precision floating point
>>> np.complex Complex numbers represented by 128 floats
>>> np.bool Boolean type storing TRUE and FALSE values
>>> np.object Python object type
>>> np.string_ Fixed-length string type
>>> np.unicode_ Fixed-length unicode type
1 2 3
1.5 2 3
4 5 6
1.5 2 3
4 5 6
1 2 3

More Related Content

What's hot (20)

PDF
TP 3 ACCESS
Chingongou ­
 
PDF
Fiche de TP 3 sur les bases de données avec les SGBD(Système de Gestion des B...
ATPENSC-Group
 
PDF
Python avancé : Gestion d'erreurs et mécanisme d'exception
ECAM Brussels Engineering School
 
PDF
Exercice 1 java Héritage
NadaBenLatifa
 
PDF
Chapitre6: Surcharge des opérateurs
Aziz Darouichi
 
PPT
Java IO Streams V4
Sunil OS
 
PDF
SQL Injection 101 : It is not just about ' or '1'='1 - Pichaya Morimoto
Pichaya Morimoto
 
PDF
Broadleaf Presents Thymeleaf
Broadleaf Commerce
 
PPTX
6-Python-Recursion PPT.pptx
Venkateswara Babu Ravipati
 
PDF
Corrige tp java
Maya Medjdoub
 
PPTX
프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장
SukYun Yoon
 
PPTX
Groovy Programming Language
Aniruddha Chakrabarti
 
PPTX
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Adriano Teixeira de Souza
 
PDF
세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter
Suhyun Park
 
ODP
Pointers in c++ by minal
minal kumar soni
 
PDF
Python avancé : Classe et objet
ECAM Brussels Engineering School
 
PDF
TP 1 ACCESS
Chingongou ­
 
PDF
PythonOOP
Veera Pendyala
 
TP 3 ACCESS
Chingongou ­
 
Fiche de TP 3 sur les bases de données avec les SGBD(Système de Gestion des B...
ATPENSC-Group
 
Python avancé : Gestion d'erreurs et mécanisme d'exception
ECAM Brussels Engineering School
 
Exercice 1 java Héritage
NadaBenLatifa
 
Chapitre6: Surcharge des opérateurs
Aziz Darouichi
 
Java IO Streams V4
Sunil OS
 
SQL Injection 101 : It is not just about ' or '1'='1 - Pichaya Morimoto
Pichaya Morimoto
 
Broadleaf Presents Thymeleaf
Broadleaf Commerce
 
6-Python-Recursion PPT.pptx
Venkateswara Babu Ravipati
 
Corrige tp java
Maya Medjdoub
 
프로그래머가 몰랐던 멀티코어 CPU 이야기 13, 14장
SukYun Yoon
 
Groovy Programming Language
Aniruddha Chakrabarti
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Adriano Teixeira de Souza
 
세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter
Suhyun Park
 
Pointers in c++ by minal
minal kumar soni
 
Python avancé : Classe et objet
ECAM Brussels Engineering School
 
TP 1 ACCESS
Chingongou ­
 
PythonOOP
Veera Pendyala
 

Similar to Numpy python cheat_sheet (20)

PDF
Numpy_Cheat_Sheet.pdf
SkyNerve
 
PPTX
NUMPY LIBRARY study materials PPT 2.pptx
CHETHANKUMAR274045
 
PDF
Numpy cheat-sheet
Arief Kurniawan
 
PPTX
Numpy in python, Array operations using numpy and so on
SherinRappai
 
PPTX
Data Preprocessing Introduction for Machine Learning
sonali sonavane
 
PPTX
NumPy-python-27-9-24-we.pptxNumPy-python-27-9-24-we.pptx
tahirnaquash2
 
PDF
ACFrOgAabSLW3ZCRLJ0i-To_2fPk_pA9QThyDKNNlA3VK282MnXaLGJa7APKD15-TW9zT_QI98dAH...
DineshThallapelly
 
PPTX
NUMPY [Autosaved] .pptx
coolmanbalu123
 
PPTX
Arrays with Numpy, Computer Graphics
Prabu U
 
PDF
Introduction to NumPy (PyData SV 2013)
PyData
 
PDF
Introduction to NumPy
Huy Nguyen
 
PDF
Essential numpy before you start your Machine Learning journey in python.pdf
Smrati Kumar Katiyar
 
PPTX
Introduction to numpy Session 1
Jatin Miglani
 
PPT
CAP776Numpy (2).ppt
ChhaviCoachingCenter
 
PPT
CAP776Numpy.ppt
kdr52121
 
PDF
CE344L-200365-Lab2.pdf
UmarMustafa13
 
PPTX
Numpy_defintion_description_usage_examples.pptx
VGaneshKarthikeyan
 
PPTX
NUMPY-2.pptx
MahendraVusa
 
PPTX
lec08-numpy.pptx
lekha572836
 
PPTX
UNIT-03_Numpy (1) python yeksodbbsisbsjsjsh
tony8553004135
 
Numpy_Cheat_Sheet.pdf
SkyNerve
 
NUMPY LIBRARY study materials PPT 2.pptx
CHETHANKUMAR274045
 
Numpy cheat-sheet
Arief Kurniawan
 
Numpy in python, Array operations using numpy and so on
SherinRappai
 
Data Preprocessing Introduction for Machine Learning
sonali sonavane
 
NumPy-python-27-9-24-we.pptxNumPy-python-27-9-24-we.pptx
tahirnaquash2
 
ACFrOgAabSLW3ZCRLJ0i-To_2fPk_pA9QThyDKNNlA3VK282MnXaLGJa7APKD15-TW9zT_QI98dAH...
DineshThallapelly
 
NUMPY [Autosaved] .pptx
coolmanbalu123
 
Arrays with Numpy, Computer Graphics
Prabu U
 
Introduction to NumPy (PyData SV 2013)
PyData
 
Introduction to NumPy
Huy Nguyen
 
Essential numpy before you start your Machine Learning journey in python.pdf
Smrati Kumar Katiyar
 
Introduction to numpy Session 1
Jatin Miglani
 
CAP776Numpy (2).ppt
ChhaviCoachingCenter
 
CAP776Numpy.ppt
kdr52121
 
CE344L-200365-Lab2.pdf
UmarMustafa13
 
Numpy_defintion_description_usage_examples.pptx
VGaneshKarthikeyan
 
NUMPY-2.pptx
MahendraVusa
 
lec08-numpy.pptx
lekha572836
 
UNIT-03_Numpy (1) python yeksodbbsisbsjsjsh
tony8553004135
 
Ad

Recently uploaded (20)

PDF
MODULE-5 notes [BCG402-CG&V] PART-B.pdf
Alvas Institute of Engineering and technology, Moodabidri
 
PDF
Design Thinking basics for Engineers.pdf
CMR University
 
PPTX
Lecture 1 Shell and Tube Heat exchanger-1.pptx
mailforillegalwork
 
PPT
Footbinding.pptmnmkjkjkknmnnjkkkkkkkkkkkkkk
mamadoundiaye42742
 
PPTX
Knowledge Representation : Semantic Networks
Amity University, Patna
 
PPTX
MODULE 04 - CLOUD COMPUTING AND SECURITY.pptx
Alvas Institute of Engineering and technology, Moodabidri
 
PDF
methodology-driven-mbse-murphy-july-hsv-huntsville6680038572db67488e78ff00003...
henriqueltorres1
 
PPTX
OCS353 DATA SCIENCE FUNDAMENTALS- Unit 1 Introduction to Data Science
A R SIVANESH M.E., (Ph.D)
 
PDF
3rd International Conference on Machine Learning and IoT (MLIoT 2025)
ClaraZara1
 
PPTX
澳洲电子毕业证澳大利亚圣母大学水印成绩单UNDA学生证网上可查学历
Taqyea
 
PPTX
Water Resources Engineering (CVE 728)--Slide 3.pptx
mohammedado3
 
PPTX
2025 CGI Congres - Surviving agile v05.pptx
Derk-Jan de Grood
 
PPT
Testing and final inspection of a solar PV system
MuhammadSanni2
 
PDF
Pressure Measurement training for engineers and Technicians
AIESOLUTIONS
 
PPTX
Distribution reservoir and service storage pptx
dhanashree78
 
PPTX
What is Shot Peening | Shot Peening is a Surface Treatment Process
Vibra Finish
 
PDF
Electrical Machines and Their Protection.pdf
Nabajyoti Banik
 
PPTX
DATA BASE MANAGEMENT AND RELATIONAL DATA
gomathisankariv2
 
PDF
Data structures notes for unit 2 in computer science.pdf
sshubhamsingh265
 
PPT
New_school_Engineering_presentation_011707.ppt
VinayKumar304579
 
MODULE-5 notes [BCG402-CG&V] PART-B.pdf
Alvas Institute of Engineering and technology, Moodabidri
 
Design Thinking basics for Engineers.pdf
CMR University
 
Lecture 1 Shell and Tube Heat exchanger-1.pptx
mailforillegalwork
 
Footbinding.pptmnmkjkjkknmnnjkkkkkkkkkkkkkk
mamadoundiaye42742
 
Knowledge Representation : Semantic Networks
Amity University, Patna
 
MODULE 04 - CLOUD COMPUTING AND SECURITY.pptx
Alvas Institute of Engineering and technology, Moodabidri
 
methodology-driven-mbse-murphy-july-hsv-huntsville6680038572db67488e78ff00003...
henriqueltorres1
 
OCS353 DATA SCIENCE FUNDAMENTALS- Unit 1 Introduction to Data Science
A R SIVANESH M.E., (Ph.D)
 
3rd International Conference on Machine Learning and IoT (MLIoT 2025)
ClaraZara1
 
澳洲电子毕业证澳大利亚圣母大学水印成绩单UNDA学生证网上可查学历
Taqyea
 
Water Resources Engineering (CVE 728)--Slide 3.pptx
mohammedado3
 
2025 CGI Congres - Surviving agile v05.pptx
Derk-Jan de Grood
 
Testing and final inspection of a solar PV system
MuhammadSanni2
 
Pressure Measurement training for engineers and Technicians
AIESOLUTIONS
 
Distribution reservoir and service storage pptx
dhanashree78
 
What is Shot Peening | Shot Peening is a Surface Treatment Process
Vibra Finish
 
Electrical Machines and Their Protection.pdf
Nabajyoti Banik
 
DATA BASE MANAGEMENT AND RELATIONAL DATA
gomathisankariv2
 
Data structures notes for unit 2 in computer science.pdf
sshubhamsingh265
 
New_school_Engineering_presentation_011707.ppt
VinayKumar304579
 
Ad

Numpy python cheat_sheet

  • 1. 2 PythonForDataScience Cheat Sheet NumPy Basics Learn Python for Data Science Interactively at www.DataCamp.com NumPy DataCamp Learn Python for Data Science Interactively The NumPy library is the core library for scientific computing in Python. It provides a high-performance multidimensional array object, and tools for working with these arrays. >>> import numpy as np Use the following import convention: Creating Arrays >>> np.zeros((3,4)) Create an array of zeros >>> np.ones((2,3,4),dtype=np.int16) Create an array of ones >>> d = np.arange(10,25,5) Create an array of evenly spaced values (step value) >>> np.linspace(0,2,9) Create an array of evenly spaced values (number of samples) >>> e = np.full((2,2),7) Create a constant array >>> f = np.eye(2) Create a 2X2 identity matrix >>> np.random.random((2,2)) Create an array with random values >>> np.empty((3,2)) Create an empty array Array Mathematics >>> g = a - b Subtraction array([[-0.5, 0. , 0. ], [-3. , -3. , -3. ]]) >>> np.subtract(a,b) Subtraction >>> b + a Addition array([[ 2.5, 4. , 6. ], [ 5. , 7. , 9. ]]) >>> np.add(b,a) Addition >>> a / b Division array([[ 0.66666667, 1. , 1. ], [ 0.25 , 0.4 , 0.5 ]]) >>> np.divide(a,b) Division >>> a * b Multiplication array([[ 1.5, 4. , 9. ], [ 4. , 10. , 18. ]]) >>> np.multiply(a,b) Multiplication >>> np.exp(b) Exponentiation >>> np.sqrt(b) Square root >>> np.sin(a) Print sines of an array >>> np.cos(b) Element-wise cosine >>> np.log(a) Element-wise natural logarithm >>> e.dot(f) Dot product array([[ 7., 7.], [ 7., 7.]]) Subsetting, Slicing, Indexing >>> a.sum() Array-wise sum >>> a.min() Array-wise minimum value >>> b.max(axis=0) Maximum value of an array row >>> b.cumsum(axis=1) Cumulative sum of the elements >>> a.mean() Mean >>> b.median() Median >>> a.corrcoef() Correlation coefficient >>> np.std(b) Standard deviation Comparison >>> a == b Element-wise comparison array([[False, True, True], [False, False, False]], dtype=bool) >>> a < 2 Element-wise comparison array([True, False, False], dtype=bool) >>> np.array_equal(a, b) Array-wise comparison 1 2 3 1D array 2D array 3D array 1.5 2 3 4 5 6 Array Manipulation NumPy Arrays axis 0 axis 1 axis 0 axis 1 axis 2 Arithmetic Operations Transposing Array >>> i = np.transpose(b) Permute array dimensions >>> i.T Permute array dimensions Changing Array Shape >>> b.ravel() Flatten the array >>> g.reshape(3,-2) Reshape, but don’t change data Adding/Removing Elements >>> h.resize((2,6)) Return a new array with shape (2,6) >>> np.append(h,g) Append items to an array >>> np.insert(a, 1, 5) Insert items in an array >>> np.delete(a,[1]) Delete items from an array Combining Arrays >>> np.concatenate((a,d),axis=0) Concatenate arrays array([ 1, 2, 3, 10, 15, 20]) >>> np.vstack((a,b)) Stack arrays vertically (row-wise) array([[ 1. , 2. , 3. ], [ 1.5, 2. , 3. ], [ 4. , 5. , 6. ]]) >>> np.r_[e,f] Stack arrays vertically (row-wise) >>> np.hstack((e,f)) Stack arrays horizontally (column-wise) array([[ 7., 7., 1., 0.], [ 7., 7., 0., 1.]]) >>> np.column_stack((a,d)) Create stacked column-wise arrays array([[ 1, 10], [ 2, 15], [ 3, 20]]) >>> np.c_[a,d] Create stacked column-wise arrays Splitting Arrays >>> np.hsplit(a,3) Split the array horizontally at the 3rd [array([1]),array([2]),array([3])] index >>> np.vsplit(c,2) Split the array vertically at the 2nd index [array([[[ 1.5, 2. , 1. ], [ 4. , 5. , 6. ]]]), array([[[ 3., 2., 3.], [ 4., 5., 6.]]])] Also see Lists Subsetting >>> a[2] Select the element at the 2nd index 3 >>> b[1,2] Select the element at row 1 column 2 6.0 (equivalent to b[1][2]) Slicing >>> a[0:2] Select items at index 0 and 1 array([1, 2]) >>> b[0:2,1] Select items at rows 0 and 1 in column 1 array([ 2., 5.]) >>> b[:1] Select all items at row 0 array([[1.5, 2., 3.]]) (equivalent to b[0:1, :]) >>> c[1,...] Same as [1,:,:] array([[[ 3., 2., 1.], [ 4., 5., 6.]]]) >>> a[ : :-1] Reversed array a array([3, 2, 1]) Boolean Indexing >>> a[a<2] Select elements from a less than 2 array([1]) Fancy Indexing >>> b[[1, 0, 1, 0],[0, 1, 2, 0]] Select elements (1,0),(0,1),(1,2)and (0,0) array([ 4. , 2. , 6. , 1.5]) >>> b[[1, 0, 1, 0]][:,[0,1,2,0]] Select a subset of the matrix’s rows array([[ 4. ,5. , 6. , 4. ], and columns [ 1.5, 2. , 3. , 1.5], [ 4. , 5. , 6. , 4. ], [ 1.5, 2. , 3. , 1.5]]) >>> a = np.array([1,2,3]) >>> b = np.array([(1.5,2,3), (4,5,6)], dtype = float) >>> c = np.array([[(1.5,2,3), (4,5,6)], [(3,2,1), (4,5,6)]], dtype = float) Initial Placeholders Aggregate Functions >>> np.loadtxt("myfile.txt") >>> np.genfromtxt("my_file.csv", delimiter=',') >>> np.savetxt("myarray.txt", a, delimiter=" ") I/O 1 2 3 1.5 2 3 4 5 6 Copying Arrays >>> h = a.view() Create a view of the array with the same data >>> np.copy(a) Create a copy of the array >>> h = a.copy() Create a deep copy of the array Saving & Loading Text Files Saving & Loading On Disk >>> np.save('my_array', a) >>> np.savez('array.npz', a, b) >>> np.load('my_array.npy') >>> a.shape Array dimensions >>> len(a) Length of array >>> b.ndim Number of array dimensions >>> e.size Number of array elements >>> b.dtype Data type of array elements >>> b.dtype.name Name of data type >>> b.astype(int) Convert an array to a different type Inspecting Your Array >>> np.info(np.ndarray.dtype) Asking For Help Sorting Arrays >>> a.sort() Sort an array >>> c.sort(axis=0) Sort the elements of an array's axis Data Types >>> np.int64 Signed 64-bit integer types >>> np.float32 Standard double-precision floating point >>> np.complex Complex numbers represented by 128 floats >>> np.bool Boolean type storing TRUE and FALSE values >>> np.object Python object type >>> np.string_ Fixed-length string type >>> np.unicode_ Fixed-length unicode type 1 2 3 1.5 2 3 4 5 6 1.5 2 3 4 5 6 1 2 3