Scipy以Numpy的高性能数组及其基本计算工具为基础,提供了大量用来操作Numpy数组的函数。
注意:SciPy不是默认安装的,需要在cmd中输入下述代码来安装:
pip install -U scipy
pip3 install Pillow
SciPy提供了些处理图像的基本功能~
#对图像进行着色及调整大小
from scipy.misc import imread, imsave, imresize
# 将图像从磁盘读取到Numpy数组中
img = imread('assets/cat.jpg')
print(img.dtype, img.shape) # Prints "uint8 (400, 248, 3)"
# 可通过将每个颜色通道缩放不同的标量常数来对图像进行着色。
# 对于该图像的shape是(400, 248, 3),
# 我们用shape是(3,)的数组 [1, 0.95, 0.9] 来乘与该数组
# 由于Numpy的广播机制,
# 红色通道的等级将保持不变
# 绿色通道的标量常数将乘以0.95
# 蓝色通道的标量常数将乘以0.9
img_tinted = img * [1, 0.95, 0.9]
# 将着色图像的像素调整为300×300大小
img_tinted = imresize(img_tinted, (300, 300))
# 将做色后的图像写回到磁盘里
imsave('assets/cat_tinted.jpg', img_tinted)
SciPy提供了些用于计算点点之间的距离的函数
#计算给定集合中所有点之间的距离
import numpy as np
from scipy.spatial.distance import pdist, squareform
# 创建以下数组,其中每一行都是二维空间中的一个点:
# [[0 1]
# [1 0]
# [2 0]]
x = np.array([[0, 1], [1, 0], [2, 0]])
print(x)
# 计算数组x所有行(点)之间的欧式距离.
# d[i, j] 表示的是 x[i, :] 与 x[j, :] 之间的欧式距离
# 数组d是即为下列数组:
# [[ 0. 1.41421356 2.23606798]
# [ 1.41421356 0. 1. ]
# [ 2.23606798 1. 0. ]]
d = squareform(pdist(x, 'euclidean'))
print(d)
Matplotlib是一个python的2D绘图库。
最重要的函数就是 ++plot++ ,使我们可以画2D数据。
注意:Matplotlib不是默认安装的,需要在cmd中输入下述代码来安装:
pip install matplotlib
#仅仅在一个图中绘画一个函数图像
import numpy as np
import matplotlib.pyplot as plt
# 计算正弦曲线上的(x,y)坐标。
x = np.arange(0, 3 * np.pi, 0.1)
y = np.sin(x)
# 使用matplotlib来进行绘画
plt.plot(x, y)
plt.show() # 必须使用show()函数来使图像出现
#在一个图中绘画多个函数,
#并给函数添加轴标签、标题及图例
import numpy as np
import matplotlib.pyplot as plt
# 计算正弦曲线和余弦曲线上的(x,y)坐标
x = np.arange(0, 3 * np.pi, 0.1)
y_sin = np.sin(x)
y_cos = np.cos(x)
# 使用matplotlib来进行绘画
plt.plot(x, y_sin)
plt.plot(x, y_cos)
plt.xlabel('x axis label')
plt.ylabel('y axis label')
plt.title('Sine and Cosine')
plt.legend(['Sine', 'Cosine'])
plt.show()
使用 subplot() 来绘制子图,即对同一个图进行分割,以绘画不同的函数。
#在一个图里画两个不同的函数
import numpy as np
import matplotlib.pyplot as plt
# 计算正弦曲线和余弦曲线上的(x,y)坐标
x = np.arange(0, 3 * np.pi, 0.1)
y_sin = np.sin(x)
y_cos = np.cos(x)
# 建立一个高度为2,宽度为1的子图网格
# 并将第一个子图设为活跃状态
# subplot(a,b,c), 参数a表示分割后图的高度
# b表示分割后图的宽度,c表示将哪一个设为活跃
plt.subplot(2, 1, 1)
# 画出第一个图像
plt.plot(x, y_sin)
plt.title('Sine')
# 将第而个子图设为活跃状态并画第二个曲线
plt.subplot(2, 1, 2)
plt.plot(x, y_cos)
plt.title('Cosine')
# 显示图像
plt.show()
通过 imshow() 函数来显示图像在图中。
#在图中显示照片
import numpy as np
from scipy.misc import imread, imresize
import matplotlib.pyplot as plt
img = imread('assets/cat.jpg')
img_tinted = img * [1, 0.95, 0.9]
# 显示原始照片
plt.subplot(1, 2, 1)
plt.imshow(img)
# 显示着色照片
plt.subplot(1, 2, 2)
# 对于imshow()函数存在一个问题,
# 若使用的数据类型不是uint8,可能会出现奇怪的问题,所以必须进行显示的强制转换。
plt.imshow(np.uint8(img_tinted))
plt.show()
详细SciPy操作请访问 SciPy参考文档
上述示例代码均来自 CS231n-Python Numpy Tutorial