Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
67 views

Foundations For Efficiencies Writing Efficiency Code With Python

This document provides an overview of writing efficient Python code. It discusses defining efficiency in terms of minimal runtime and resource usage, as well as writing Pythonic code that focuses on readability. The document covers using Python's built-in functions like range(), enumerate(), map(), and modules from the standard library to build efficient code. It also discusses the benefits of NumPy arrays over lists, such as homogeneity, broadcasting, and boolean indexing capabilities. Overall, the document teaches how to write clean, fast code by leveraging Python's built-in tools and NumPy functionality.

Uploaded by

chandra putra
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
67 views

Foundations For Efficiencies Writing Efficiency Code With Python

This document provides an overview of writing efficient Python code. It discusses defining efficiency in terms of minimal runtime and resource usage, as well as writing Pythonic code that focuses on readability. The document covers using Python's built-in functions like range(), enumerate(), map(), and modules from the standard library to build efficient code. It also discusses the benefits of NumPy arrays over lists, such as homogeneity, broadcasting, and boolean indexing capabilities. Overall, the document teaches how to write clean, fast code by leveraging Python's built-in tools and NumPy functionality.

Uploaded by

chandra putra
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 28

Welcome!

W R ITIN G E FFIC IE N T P YTH ON C OD E

Logan Thomas
Senior Data Scientist, Protection
Engineering Consultants
Course overview
Your code should be a tool used to gain insights
Not something that leaves you waiting for results

In this course, you will learn:


How to write clean, fast, and e cient Python code

How to pro le your code for bo lenecks

How to eliminate bo lenecks and bad design pa erns

WRITING EFFICIENT PYTHON CODE


Defining efficient
Writing e cient Python code
Minimal completion time (fast runtime)

Minimal resource consumption (small memory footprint)

WRITING EFFICIENT PYTHON CODE


Defining Pythonic
Writing e cient Python code
Focus on readability

Using Python's constructs as intended (i.e., Pythonic)

# Non-Pythonic
doubled_numbers = []

for i in range(len(numbers)):
doubled_numbers.append(numbers[i] * 2)
# Pythonic
doubled_numbers = [x * 2 for x in numbers]

WRITING EFFICIENT PYTHON CODE


The Zen of Python by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
...

WRITING EFFICIENT PYTHON CODE


Things you should know
Data types typically used in Data Science
Data Types for Data Science

Writing and using your own functions


Python Data Science Toolbox (Part 1)

Anonymous functions ( lambda expressions)


Python Data Science Toolbox (Part 1)

Writing and using list comprehensions


Python Data Science Toolbox (Part 2)

WRITING EFFICIENT PYTHON CODE


Let's get started!
W R ITIN G E FFIC IE N T P YTH ON C OD E
Building with built-
ins
W R ITIN G E FFIC IE N T P YTH ON C OD E

Logan Thomas
Senior Data Scientist, Protection
Engineering Consultants
The Python Standard Library
Python 3.6 Standard Library
Part of every standard Python installation

Built-in types
list , tuple , set , dict , and others

Built-in functions
print() , len() , range() , round() , enumerate() , map() , zip() , and others

Built-in modules
os , sys , itertools , collections , math , and others

WRITING EFFICIENT PYTHON CODE


Built-in function: range()
Explicitly typing a list of numbers

nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

WRITING EFFICIENT PYTHON CODE


Using range() to create the same list

# range(start,stop)
nums = range(0,11)

nums_list = list(nums)
print(nums_list)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# range(stop)
nums = range(11)

nums_list = list(nums)
print(nums_list)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

WRITING EFFICIENT PYTHON CODE


Built-in function: range()
Using range() with a step value

even_nums = range(2, 11, 2)

even_nums_list = list(even_nums)
print(even_nums_list)

[2, 4, 6, 8, 10]

WRITING EFFICIENT PYTHON CODE


Built-in function: enumerate()
Creates an indexed list of objects

letters = ['a', 'b', 'c', 'd' ]

indexed_letters = enumerate(letters)

indexed_letters_list = list(indexed_letters)
print(indexed_letters_list)

[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]

WRITING EFFICIENT PYTHON CODE


Built-in function: enumerate()
Can specify a start value

letters = ['a', 'b', 'c', 'd' ]

indexed_letters2 = enumerate(letters, start=5)

indexed_letters2_list = list(indexed_letters2)
print(indexed_letters2_list)

[(5, 'a'), (6, 'b'), (7, 'c'), (8, 'd')]

WRITING EFFICIENT PYTHON CODE


Built-in function: map()
Applies a function over an object

nums = [1.5, 2.3, 3.4, 4.6, 5.0]

rnd_nums = map(round, nums)

print(list(rnd_nums))

[2, 2, 3, 5, 5]

WRITING EFFICIENT PYTHON CODE


Built-in function: map()
map() with lambda (anonymous function)

nums = [1, 2, 3, 4, 5]

sqrd_nums = map(lambda x: x ** 2, nums)

print(list(sqrd_nums))

[1, 4, 9, 16, 25]

WRITING EFFICIENT PYTHON CODE


Let's start building
with built-ins!
W R ITIN G E FFIC IE N T P YTH ON C OD E
The power of
NumPy arrays
W R ITIN G E FFIC IE N T P YTH ON C OD E

Logan Thomas
Senior Data Scientist, Protection
Engineering Consultants
NumPy array overview
Alternative to Python lists

nums_list = list(range(5))

[0, 1, 2, 3, 4]

import numpy as np

nums_np = np.array(range(5))

array([0, 1, 2, 3, 4])

WRITING EFFICIENT PYTHON CODE


# NumPy array homogeneity
nums_np_ints = np.array([1, 2, 3])

array([1, 2, 3])

nums_np_ints.dtype

dtype('int64')

nums_np_floats = np.array([1, 2.5, 3])

array([1. , 2.5, 3. ])

nums_np_floats.dtype

dtype('float64')

WRITING EFFICIENT PYTHON CODE


NumPy array broadcasting
Python lists don't support broadcasting

nums = [-2, -1, 0, 1, 2]


nums ** 2

TypeError: unsupported operand type(s) for ** or pow(): 'list' and 'int'

WRITING EFFICIENT PYTHON CODE


List approach

# For loop (inefficient option)


sqrd_nums = []
for num in nums:
sqrd_nums.append(num ** 2)
print(sqrd_nums)

[4, 1, 0, 1, 4]

# List comprehension (better option but not best)


sqrd_nums = [num ** 2 for num in nums]

print(sqrd_nums)

[4, 1, 0, 1, 4]

WRITING EFFICIENT PYTHON CODE


NumPy array broadcasting
NumPy array broadcasting for the win!

nums_np = np.array([-2, -1, 0, 1, 2])


nums_np ** 2

array([4, 1, 0, 1, 4])

WRITING EFFICIENT PYTHON CODE


Basic 1-D indexing (lists) Basic 1-D indexing (arrays)

nums = [-2, -1, 0, 1, 2] nums_np = np.array(nums)


nums[2] nums_np[2]

0 0

nums[-1] nums_np[-1]

2 2

nums[1:4] nums_np[1:4]

[-1, 0, 1] array([-1, 0, 1])

WRITING EFFICIENT PYTHON CODE


# 2-D list # 2-D array
nums2 = [ [1, 2, 3],
[4, 5, 6] ] nums2_np = np.array(nums2)

Basic 2-D indexing (lists) Basic 2-D indexing (arrays)

nums2[0][1] nums2_np[0,1]

2 2

[row[0] for row in nums2] nums2_np[:,0]

[1, 4] array([1, 4])

WRITING EFFICIENT PYTHON CODE


NumPy array boolean indexing
nums = [-2, -1, 0, 1, 2]
nums_np = np.array(nums)

Boolean indexing

nums_np > 0

array([False, False, False, True, True])

nums_np[nums_np > 0]

array([1, 2])

WRITING EFFICIENT PYTHON CODE


No boolean indexing for lists

# For loop (inefficient option)


pos = []
for num in nums:
if num > 0:
pos.append(num)
print(pos)

[1, 2]

# List comprehension (better option but not best)


pos = [num for num in nums if num > 0]
print(pos)

[1, 2]

WRITING EFFICIENT PYTHON CODE


Let's practice with
powerful NumPy
arrays!
W R ITIN G E FFIC IE N T P YTH ON C OD E

You might also like