通过np.arange创建
通过指定start, stop (不包括stop),interval来产生一个1维的ndarray
a = np.arange(0, 20, 2)
array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
ndarray数组的统计方法
可以通过数组上的一组数学函数对整个数组或某个轴向的数据进行统计计算。主要包括如下统计方法:
mean:计算算术平均数,零长度数组的mean为NaN。
std和var:计算标准差和方差,自由度可调(默认为n)。
sum :对数组中全部或某轴向的元素求和,零长度数组的sum为0。
max和min:计算最大值和最小值。
argmin和argmax:分别为最大和最小元素的索引。
cumsum:计算所有元素的累加。
cumprod:计算所有元素的累积
线性代数(如矩阵乘法、矩阵分解、行列式以及其他方阵数学等)是任何数组库的重要组成部分,Numpy中实现了线性代数中常用的各种操作,并形成了numpy.linalg线性代数相关的模块。主要介绍如下函数:
diag:以一维数组的形式返回方阵的对角线(或非对角线)元素,或将一维数组转换为方阵(非对角线元素为0)。
dot:矩阵乘法。
trace:计算对角线元素的和。
det:计算矩阵行列式。
eig:计算方阵的特征值和特征向量。
inv:计算方阵的逆。(np.linalg.inv(tmp))
使用np.fromfile从文本文件’housing.data’读入数据
这里要设置参数sep = ’ ',表示使用空白字符来分隔数据
空格或者回车都属于空白字符,读入的数据被转化成1维数组
d = np.fromfile(’./work/housing.data’, sep = ’ ')
产生随机数组a
a = np.random.rand(3,3)
np.save(‘a.npy’, a)
从磁盘文件’a.npy’读入数组
b = np.load(‘a.npy’)
检查a和b的数值是否一样
check = (a == b).all()
导入需要的包
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
读入图片
image = Image.open(’./work/images/000000001584.jpg’)
image = np.array(image)
查看数据形状,其形状是[H, W, 3], 其中H代表高度, W是宽度,3代表RGB三个通道
垂直方向翻转
这里使用数组切片的方式来完成,
相当于将图片最后一行挪到第一行,
倒数第二行挪到第二行,…,
第一行挪到倒数第一行
对于行指标,使用::-1来表示切片,
负数步长表示以最后一个元素为起点,向左走寻找下一个点
对于列指标和RGB通道,仅使用:表示该维度不改变
image2 = image[::-1, :, :]
plt.imshow(image2)
水平方向翻转
image3 = image[:, ::-1, :]
plt.imshow(image3)
保存图片
im3 = Image.fromarray(image3)
im3.save(‘im3.jpg’)
高度方向裁剪
H, W = image.shape[0], image.shape[1]
注意此处用整除,H_start必须为整数
H1 = H // 2
H2 = H
image4 = image[H1:H2, :, :]
plt.imshow(image4)
宽度方向裁剪
W1 = W//6
W2 = W//3 * 2
image5 = image[:, W1:W2, :]
plt.imshow(image5)
两个方向同时裁剪
image5 = image[H1:H2,
W1:W2, :]
plt.imshow(image5)
调整亮度
image7 = image * 2.0
由于图片的RGB像素值必须在0-255之间,此处使用np.clip进行数值裁剪
image7 = np.clip(image7,
a_min=None, a_max=255.)
plt.imshow(image7.astype(‘uint8’))
高度方向每隔一行取像素点
image8 = image[::2, :, :]
plt.imshow(image8)
宽度方向每隔一列取像素点
image9 = image[:, ::2, :]
plt.imshow(image9)
间隔行列采样,图像尺寸会减半,清晰度变差
image10 = image[::2, ::2, :]
plt.imshow(image10)
image10.shape