Numpy

2018-12-28  本文已影响0人  我是聪

Arrays

A numpy array is a grid of values, all of the same type(类型相同), and is indexed by a tuple of nonnegative integers. The number of dimensions is the rank of the array; the shape of an array is a tuple of integers giving the size of the array along each dimension.

We initialize numpy arrays from nested(嵌套) Python lists, and access elements using square brackets(方括号):

import numpy as np

a = np.array([1, 2, 3])

print(type(a))    print(a.shape)    print(a[0], a[1], a[2])    a[0] = 5

b = np.array([[1, 2, 3], [4, 5, 6]])

print(b.shape)    print(b[0, 0], b[0, 1], b[1, 0])

Numpy also provides many functions to create arrays:

import numpy as np

a = np.zeros((2, 2))

b = np.ones((1, 2))

e = np.random.random((2, 2))

Array indexing

Slicing: Similar to Python lists, numpy arrays can be sliced. Since arrays may be multidimensional, you must specify a slice for each dimension of the array:

import numpy as np 

a = np.array([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12]])

b = a[:2, 1:3]

print(a[0, 1])    b[0, 0] = 77    print(a[0, 1]) # b[0, 0] is the same piece of data as a[0, 1]

Boolean array indexing: Boolean array indexing lets you pick out arbitrary elements of an array. Frequently this type of indexing is used to select the elements of an array that satisfy some condition. Here is an example:

import numpy as np 

a = np.array([[1, 2],][3, 4],[5, 6])

bool_idx = (a > 2)

print(bool_idx)

print(a[a > 2]) #We can do all of the above in a single concise statement

Datatypes

Every numpy array is a grid of elements of the same type. Numpy provides a large set of numeric datatypes that you can use to construct arrays. Numpy tries to guess a datatype(猜测数据类型) when you create an array, but functions that construct arrays usually also include an optional argument to explicitly specify the datatype(显示指定数据类型). Here is an example:print

import numpy as np

x = np.array([1, 2])#Let numpy choose the datatype

print(x.dtype) #Prints "int64"

x = np.array([1.0, 2.0]) # Let numpy choose the datatype

ptint(x.dtype) # Print "float64

Array math

Basic mathematical functions operate elementwise on arrays, and are available both as operator overloads and as functions in the numpy module:

import numpy sa np

x = np.array([[1,2],[3, 4]], dtype = np.float64)

y = np.array([[5, 6],[7, 8]], dtype = np.float64)

print(x + y)

print(np.add(x, y))


Broadcasting

Broadcasting is a powerful mechanism that allows numpy to work with arrays of different shapes when performing arithmetic operations(不同大小数组之间的操作). Frequently we have a smaller array and a la#rger array, and we want to use the smaller array multiple times to perform some operation on the larger array.

import numpy as np

#we will add the vector v to each row of the matric x,

# storing the result in the matrix y                                                                                                                              x = np.array([[1, 2, 3], [4, 5, 6], [7,8, 9], [10, 11, 12]])

y = np.array([1, 0, 1])

y = np.empty_like(x) # Create an each row of the matrix with an explicit loop

for i in range(4)

    y[i, :] = x[i, :] + v

This works; however when the matrix x is very large, computing an explict loop in Python could be slow.

Note that adding the vector v to each row of the matrix x is equivalent to forming a matrix vv by stacking multiple copies of v vertically,then performing elementwise summation of x and vv.We could implement this approach like 

import numpy as np

#We will add the vector v to each row of the matrix x 

#storing the result in the matrix y

x = np.array([[1, 2, 3], [4, 5, 6],[7, 8, 9],[10, 11, 12]])

v = np.array([1, 0, 1])

vv = np.tile(v, (4, 1)) # Stack 4 copies of v on top of each other

y = x + w

print(y)

Numpy broadcasting allows us to perform this computation without actually creating multiple copies of v.Consider this version, using broacasting:

import numpy as np  

x = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9],[10, 11, 12]])

v = x + v # Add v to each row of x using broadcasting

print(y)


SciPy

Numpy provides a high-performance multidimensional array and basic tools to compute with and manipulate these arrays.Scipy builds on this,and provides a large number of functions that operate on numpy arrays and are useful for different types of scientific and engineering applications.

Image operations

Scipy provides some basic functions to work with images. For example, it has functions to read images from disk into numpy arrays, to write numpy arrays to disk as images, and to resize images.

from scipy.misc import imread, imsave,imresize 

# Read an JPEG image into a numpy array

img = imread('asset/cat.jpg')

print(img.dtype, img.shape) # Prints "unit8 (400, 248, 3)"

# We can tint the image by scaling each of the color channels

# by a different scalar constant.The image has shape (400, 248, 3)

#We multiply it by the array [1, 0.95, 0.9 ] of (3,);

#numpy broadcasting means that this leaves the red channel unchanged

#and multiple the green and blue channels by 0.95 and 0.9 respecctively

img_tinted = img * [1, 0.95 ,0.9]

#Resize the tinted image to be 300 by 300 pixels

img_tinted = imresize(img_tinted, 300, 300))

# Write the tinted images back to disk

imsave('assets/cat_tinted.jpg', img_tinted)


Matplotlib

import numpy as np

import matplotlib.pyplot as plt

# Compute the x and y coordinates for points on a sine curve

x = np.arrage(0, 3 * np.pi, 0.1)

y = np.sin(x)

# Plot the points using matplotlib

plt.plot(x, y)

plt.show() # You must call plt.show() to make graphics appear

With just a little bit of extra work we can easily plot multiple lines at once,

and add a title, legend, and axis label

import numpy as np

import matplotlib.pyplot as plt

x = np.arange(0, 3 * np.pi, 0..1)

y_sin = np.sin(x)

y_cos = np.cos(x)

# Plot the points using matplotlib

plt.plot(x, y_sin)

plt.plot(x, y_cos)

plt.xlabel('x axis label')

plt.ylabe("y axis label")

plt.title("Since and Cosine")

plt.legend([ "Sine", "Cosine"])

plt.show()

Subplots

you can plot different things in the same figure using the subplot function

import numpy as np

import matplotlib.pyplot as plt 

# Compute the x and y coordinates for points on sine and cosine curves

x = np.arange(0, 3 * np.pi, 0.1)

y_sin = np.sin(x)

y_sin = np.cos(x)


上一篇下一篇

猜你喜欢

热点阅读