Scipy 直观操作

Scipy

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

qTUX6ZQRIg.png!large

图像处理-Image operations

SciPy 提供了些处理图像的基本功能

#对图像进行着色及调整大小

from scipy.misc import imread, imsave, imresize

# 将图像从磁盘读取到Numpy数组中
img = imread('./assets/Galactic.jpg')
print(img.dtype, img.shape)  # Prints "uint8 (966, 1280, 3)"

# 可通过将每个颜色通道缩放不同的标量常数来对图像进行着色。
# 对于该图像的shape是(966, 1280, 3),
# 我们用shape是(3,)的数组 [1, 0.95, 0.9] 来乘与该数组
# 由于Numpy的广播机制,
# 红色通道的等级将保持不变
# 绿色通道的标量常数将乘以0.55
# 蓝色通道的标量常数将乘以0.5
img_tinted = img * [1, 0.55, 0.5]

# 将着色图像的像素调整为300×300大小
img_tinted = imresize(img_tinted, (300, 300))

# 将做色后的图像写回到磁盘里
imsave('./assets/Galactic_tinted.jpg', img_tinted)

效果图对比:
原始图像

mNy8MwHKZ0.png!large

着色和调整大小后的图像:

wMGvs3tQ16.png!large

两点间距离-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 模块

最重要的函数就是 plot ,可以画 2D 数据。

#仅仅在一个图中绘画一个函数图像

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()函数来使图像出现

绘画的图像:

vpscEMMgMJ.png!large

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

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

绘画的图像:

8iKGBETvgh.png!large

绘制子图-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 分割后的子图:

lUXj0KxKCd.png!large

图像-Images

通过 imshow() 函数来显示图像在图中。

#在图中显示照片

import numpy as np
from scipy.misc import imread, imresize
import matplotlib.pyplot as plt

img = imread('assets/Galactic.jpg')
img_tinted = img * [.3, .75, 1.1]

# 显示原始照片
plt.subplot(1, 2, 1)
plt.imshow(img)

# 显示着色照片
plt.subplot(1, 2, 2)

# 对于imshow()函数存在一个问题,
# 若使用的数据类型不是uint8,可能会出现奇怪的问题,所以必须进行显示的强制转换。
plt.imshow(np.uint8(img_tinted))
plt.show()

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

MjmOnVUnF3.png!large

本作品采用《CC 协议》,转载必须注明作者和本文链接
不要试图用百米冲刺的方法完成马拉松比赛。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!