CS231n,你还需要了解点SciPy

SciPy

Scipy以Numpy的高性能数组及其基本计算工具为基础,提供了大量用来操作Numpy数组的函数


讲解点⬇

img


注意:SciPy不是默认安装的,需要在cmd中输入下述代码来安装:

pip install -U scipy
pip3 install Pillow

图像处理-Image operations

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)

着色前后的效果图对比

效果图


两点间距离-Distance between points

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

Matplotlib是一个python的2D绘图库。

简要介绍 ++matplotlib.pyplot++ 模块
测绘-Plotting

最重要的函数就是 ++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()函数来使图像出现

python绘画的图像:

figure1


#在一个图中绘画多个函数,
#并给函数添加轴标签、标题及图例

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()

python绘画的图像:

figure1


绘制子图-Subplots

使用 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()

python分割后的子图:

figure1


图像-Images

通过 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()

python分割后的着色前后对比图:

figure1


详细SciPy操作请访问 SciPy参考文档


上述示例代码均来自 CS231n-Python Numpy Tutorial

猜你喜欢

转载自blog.csdn.net/hacker_Dem_br/article/details/86448685