在学python的过程中会发现,numpy用的非常多,因此针对这个库中的一些方法做了点小笔记,并不全面,且大多内容参考自其他博客内容。
本文的大部分代码来自:给深度学习入门者的Python快速教程 - numpy和Matplotlib篇,结合文中的代码进行了学习,在有些地方不太理解,因此也参考了其他资料做了简要补充说明。
1、array(数组)
是numpy中最基本的数据结构,利用array函数可以非常方便的创建多种类型的数组,并且可以是多维数组。
https://blog.csdn.net/qq_36076233/article/details/70308618
NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推。在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量。比如说,二维数组相当于是一个一维数组,而这个一维数组中每个元素又是一个一维数组。所以这个一维数组就是NumPy中的轴(axes),而轴的数量——秩,就是数组的维数。
Numpy库中的矩阵模块为ndarray对象,有很多属性:T,data, dtype, flags, flat, imag, real, size, itemsize, nbytes, ndim, shape, strides, ctypes, base等等。
import numpy as np
a = [1, 2, 3, 4] #普通的定义数组方法
b = np.array(a) # array([1, 2, 3, 4])
type(b) # <type 'numpy.ndarray'>
1、https://blog.csdn.net/scorpion_zs/article/details/52526310
ndarray对象是用于存放同类型元素的多维数组,是numpy中的基本对象之一,另一个是func对象。
2、https://blog.csdn.net/norsd/article/details/76780310
简单说 numpy.array(…) 作为一个函数, 他返回numpy.ndarray这个class
与numpy.array这个函数同类型的有:
numpy.array
numpy.zeros
numpy.empty
2、ndarray.shape
shape是ndarray的一个成员变量,表示数组的每个方向上的维度。
a.shape是通过访问矩阵类的成员变量的shape值;
a.shape()是通过调用矩阵类的成员函数的到shape值;
两者返回的结果相同,都是一个tuple类型,表示数组的维度。
例如:
b.shape #(4,)
b.shape返回一个数组维度的元组,结果表示b是一个一维数组,数组中有4个元素。
又如:
bb=np.array([[1],[2]])
bb.shape #(2,1)
结果(2,1)表示c是一个二维数组,每个数组中有一个元素。
注意:
(4,)表示一维数组,4个元素
(2,3)表示二维数组,每维3个元素
3、np.ndarray的size
np.ndarray的size 结果表示数组所有元素的个数(包括所有维度);
c = [[1, 2], [3, 4]] # 二维列表
d = np.array(c) # 二维numpy数组
d.shape # (2, 2) 二维数组,每维度两个元素
d.size # 4 表示数组所有元素的个数(包括所有维度)
4、np.max与np.maximum
(转载自https://blog.csdn.net/lanchunhui/article/details/52700895)
(1)参数部分:
- np.max:(a, axis=None, out=None, keepdims=False)
求序列的最值
最少接收一个参数
axis:默认为列向(也即 axis=0),axis = 1 时为行方向的最值; - np.maximum:(X, Y, out=None)
X 与 Y 逐位比较取其大者;
最少接收两个参数
(2)使用上:
np.max([-2, -1, 0, 1, 2]) #2
np.maximum([-2, -1, 0, 1, 2], 0) #array([0, 0, 0, 1, 2]) 注意!!!
# 当然 np.maximum 接受的两个参数,也可以大小一致
# 或者更为准确地说,第二个参数只是一个单独的值时,其实是用到了维度的 broadcast 机制;
同时max还可以指定某个维度:
#(1,2)
#(3,4)
#第一列是1,3,第二列是2,4;
#第一行是1,2,第二行是3,4;
d.max(axis=0) # axis=0表示列,array([3, 4])
#【因max(1,3)=3;max(2,4)=4】
d.max(axis=1) # axis=1表示行,array([2, 4])
#【因max(1,2)=2;max(3,4)=4】
d.mean(axis=0) # 列的均值,array([ 2., 3.])
#【因mean(1,3)=2;mean(2,4)=3】
其它:
b.argmax() # 3 返回数组中最大值的坐标
b.max() # 4 最大值
b.mean() # 2.5 均值
5、numpy.flatten()和numpy.ravel()
(参考:https://blog.csdn.net/lanchunhui/article/details/50354978)
二者的功能都是将多维数组降成一位数组。区别在于:numpy.faltten()返回一份拷贝,对拷贝所做的修改不会影响原始数据,而numpy.ravel返回视图,改变后会同时修改原始矩阵
d.flatten() # 展开一个numpy数组为1维数组,array([1, 2, 3, 4])
np.ravel(c) # 展开一个可以解析的结构为1维数组,array([1, 2, 3, 4])
6、numpy.ones()和numpy.repeat()
numpy.ones()生成值为全1的数组;
numpy.repeat()
# 3x3的浮点型2维数组,并且初始化所有元素值为1
e = np.ones((3, 3), dtype=np.float)
#结果:array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
# 创建一个一维数组,元素值是把3重复4次
f = np.repeat(3, 4) #结果: array([3, 3, 3, 3])
7、np.zeros()
(参考: https://blog.csdn.net/qq_26948675/article/details/54318917)
用法:zeros(shape, dtype=float, order=’C’)
(1)shape可指定形状(维度和元素个数);
(2)dtype:数据类型,可选择不同参数,默认是numpy.float64;
- dtype数据类型:
- t ,位域,如t4代表4位
- b,布尔值,true or false
- u,无符号整数,u8(64位)
- f,浮点数,f8(64位)
- c,浮点负数,
- o,对象,
- s,a,字符串,s24
- u,unicode,u24
(3)order:可选参数,c代表与c语言类似,行优先;F代表列优先。
#1、生成一维3列的浮点型(numpy.float64)型零数组
np.zeros(3) #array([0.,0.,0.]) 默认是浮点型零数组
#2、生成一维3列的整型零数组
np.zeros((3),dtype=np.int) #array([0,0,0])
#3、生成2维3列的零数组
t=(2,3)
np.zeros(t)
#结果是 array([[0., 0., 0.],
[0., 0., 0.]]) 二维,每维3个元素
#4、生成1维2列的数组
np.zeros((2,), dtype=[('x', 'i4'), ('y', 'i4')])
#结果是 array([(0, 0), (0, 0)],dtype=[('x', '<i4'), ('y', '<i4')])
4的结果: array([(0, 0), (0, 0)],dtype=[('x', '<i4'), ('y', '<i4')])
对比分析: np.zeros(2,) 的结果是 array([0., 0.])
!注意:第4个例子:“(2,)”,表示生成的是一个1维数组,包括2个元素。dtype的参数含义为:每一个元素包括2个值:x和y,并且x和y的类型都是8位整数(i表示整数,i4表示2^4=8),因为#4指定了x和y,所以最后的数组每个元素里面包括两个值。
4中的dtype后面若是再加一个z,则生成数组会变成每个元素包括三个值
np.zeros((2,), dtype=[(‘x’, ‘i4’), (‘y’, ‘i4’), (‘z’, ‘i4’)])
结果是: [(0, 0, 0) (0, 0, 0)], dtype=[(‘x’, ‘i4’), (‘y’, ‘i4’), (‘z’, ‘i4’)])
8、np.save和np.load(文件读取)
#代码来自:numpy教程:基本输入输出和文件输入输出Input and output
(https://blog.csdn.net/pipisorry/article/details/39088003)
>>> a = np.arange(8)
>>> b = np.add.accumulate(a)
>>> c = a + b
>>> f = file("result.npy", "wb")
>>> np.save(f, a) # 顺序将a,b,c保存进文件对象f
>>> np.save(f, b)
>>> np.save(f, c)
>>> f.close()
>>> f = file("result.npy", "rb")
>>> np.load(f) # 顺序从文件对象f中读取内容
array([0, 1, 2, 3, 4, 5, 6, 7])
>>> np.load(f)
array([ 0, 1, 3, 6, 10, 15, 21, 28])
>>> np.load(f)
array([ 0, 2, 5, 9, 14, 20, 27, 35])