datacamp:numpy知识点
3.look though 这个np.array
4. 随机创建data
目录
1-7. 入门
8. 创建数组
9. np.reshape()
10. 将多维数组转为一维数组
11. 算术运算
12. numpy 中数组和矩阵的区别
numpy入门
1. numpy的主要操作对象是同类型的多维数组。
它是一个由正整数元组索引,元素类型相同的表(通常元素是数字)。在 numpy维度被称为 axes, axes 的数量称为 rank。
2. numpy的数组类是ndarray,也可以叫array
3.ndarray.ndim
数组的 axes (维数)数值大小。
4.ndarray.shape
数组的维数,这是由每个维度的大小组成的一个元组。对于一个 n行 m 列的矩阵。shape 是 (n, m)。由 shape 元组的长度得出 rank 或者维数 ndim。
5.ndarray.size
数组元素的个数总和,这等于 shape 元组数字的乘积。
6.ndarray.dtype
在数组中描述元素类型的一个对象.它是一种可以用标准的python类型创建和指定的类型。eg:numpy.int32,numpy.int16,numpy.float64……
7.ndarray.itemsize
数组中每个元素所占字节数。
8.创建数组
8.1 用array创建一维数组
创建的数组类型是从原始序列中的元素推断出来的。
8.2 用array创建高维数组
8.3 用占位符创建
8.3.1 np.zeros()
创建一个全是0的数组
ps: np.zeros_like()生成相同形状的全0数组
8.3.2 np.ones
创建全是1的数组
8.3.3 np.empty()
empty 创建一个随机的数组。默认创建数组的类型是 float64
8.4 用arrange创建数组
np.arrange() 来表示取值范围
8.5 用np.linspace 来创建数组 等差数列
当 arange 的参数是浮点型的,由于有限的浮点精度,通常不太可能去预测获得元素的数量。出于这个原因,通常选择更好的函数 linspace,他接收我们想要的元素数量而不是步长作为参数。
类似arange,linspace从[start , stop ] 生成num个数,Num个数间隔相等。(默认为float)
linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
8.6 np.random.rand()随机生成取值在(0,1)的数组
8.7 np.random.randit() 产生随机整数
numpy.random.randint(low, high=None, size=None, dtype='l')
8.8 np.random.choice ()
# 参数意思分别 是从a 中以概率P,随机选择3个, p没有指定的时候相当于是一致的分布
a1 = np.random.choice(a=5, size=3, replace=False, p=None)
print(a1)
# 非一致的分布,会以多少的概率提出来
a2 = np.random.choice(a=5, size=3, replace=False, p=[0.2, 0.1, 0.3, 0.4, 0.0])
print(a2)
# replacement 代表的意思是抽样之后还放不放回去,如果是False的话,那么出来的三个数都不一样,如果是True的话, 有可能会出现重复的,因为前面的抽的放回去了。
https://blog.csdn.net/qfpkzheng/article/details/79061601
8.9 numpy.random.sample
返回一个随机数组,取值在(0,1)之间
numpy.random.sample(size=None)
参数:
size: int or tuple of ints, optional 可以是整数或者元组
Output shape. If the given shape is, e.g., (m, n, k), then m * n * k samples are drawn
如果size输入的是元组形式,返回的是多维数组
numpy.random.sample — NumPy v1.16 Manual
8.10 numpy.random.randn()
numpy.random.randn(d0,d1,…,dn)
randn函数返回一个或一组样本,具有标准正态分布。
dn表格每个维度
返回值为指定维度的array
ps:标准正态分布又称为u分布,是以0为均值、以1为标准差的正态分布,记为N(0,1)
https://blog.csdn.net/u012149181/article/details/78913167
8.11 np.logspace()
创建等比数列
8.12 np.fromstring()
9. 修改数组的形状
9.1 np.reshape()
将一维的数据转为多维的
9.2 数组的转置transposed
9.3 np.resize()
reshape函数返回修改的形状,而 resize方法直接修改数组本身。
10.将多维数组转为一维数组np.ravel() np.flatten() np.squeeze()
numpy中的ravel()、flatten()、squeeze()都有将多维数组转换为一维数组的功能,区别:
ravel():如果没有必要,不会产生源数据的副本
flatten():返回源数据的副本
squeeze():只能对维数为1的维度降维
另外,reshape(-1)也可以“拉平”多维数组
11.numpy中的算数计算
11.1 四则运算
+’,’-‘,’*’,’/’运算都是基于全部的数组元素的
11.1.1 * vs np.dot() vs np.multiply() 不同 见13
https://blog.csdn.net/zenghaitao0128/article/details/78715140
11.2 开根号/指数 universal functions
还包含 sin cos
11.3 += 和 *=
直接在原数组上做修改,不会创建新数组。
11.4 聚合运算
还有mean() median()
ps: numpy.ptp(a, axis=None, out=None) 返回最大和最小值之差
11.5 二元ufunc
11.6 数组的集合运算
11.7 numpy.linalg() 常用计算函数
12. numpy 中数组和矩阵的区别
1. Numpy matrices必须是2维的,但是 numpy arrays (ndarrays) 可以是多维的(1D,2D,3D····ND). Matrix是Array的一个小的分支,包含于Array。所以matrix 拥有array的所有特性。
2. 在numpy中matrix的主要优势是:相对简单的乘法运算符号。例如,a和b是两个matrices,那么a*b,就是矩阵积。
3. matrix 和 array 都可以通过objects后面加.T 得到其转置。但是 matrix objects 还可以在后面加 .H f得到共轭矩阵, 加 .I 得到逆矩阵。
4. 相反的是在numpy里面arrays遵从逐个元素的运算,所以array:c 和d的c*d运算相当于matlab里面的c.*d运算。而矩阵相乘,则需要numpy里面的dot命令 。
https://blog.csdn.net/wyl1813240346/article/details/79806207
13. * vs np.dot() vs np.multiply() 区别
数组的 * 操作不像其他的矩阵语言。矩阵乘法通过 dot 函数进行模拟
13.1 np.multiply()用法
数组和矩阵对应位置相乘,输出与相乘数组/矩阵的大小一致
13.1.1 数组
13.1.2 矩阵
13.2 np.dot() 用法
对于秩为1的数组,执行对应位置相乘,然后再相加;
对于秩不为1的二维数组,执行矩阵乘法运算;超过二维的可以参考numpy库介绍。
13.2.1 一维数组
13.2.2 二维数组
13.3 * 的用法
对数组执行对应位置相乘
对矩阵执行矩阵乘法运算
13.3.1 数组 *
13.3.2 矩阵
14. 索引,切片和迭代
14.1 一维数组
一维数组可以被索引,切片和迭代,就像列表和其他Python序列一样。
14.2 二维数组
14.3 多维数组 三维数组 用... 查询数组
15. 数组的组合拼接
使用hstack 横向拼接
使用vstack 纵向拼接
16.数组的拷贝
不同的数组对象可以分享相同的数据。view 方法创建了一个相同数据的新数组对象。 浅拷贝
想要真正的复制一份a给b,可以使用copy. 深拷贝
17.numpy中的函数
18. numpy中的矩阵
矩阵与数组有不同,矩阵最多是2维的
18.1 矩阵的创建
18.2 矩阵的乘法
np.multiply()
(*)
18.3 矩阵的转置 .T()
18.4 矩阵求逆nlg.inv()
18.5 特征向量
ps:忘记特征向量怎么求了
先占着坑
pass
19. np.meshgrid()用法
meshgrid(*xi, **kwargs)
功能:从一个坐标向量中返回一个坐标矩阵
20.np.cumsum()
numpy.cumsum(a, axis=None, dtype=None, out=None)
axis=0,按照行累加。
axis=1,按照列累加。
axis不给定具体值,就把numpy数组当成一个一维数组。
自动转换成一维数组,按照行累加
21.np.where()用法
21.1 np.where(condition, x, y)
满足条件(condition),输出x,不满足输出y。
21.2 np.where(condition)
只有条件 (condition),没有x和y,则输出满足条件 (即非0) 元素的坐标 (等价于numpy.nonzero)。这里的坐标以tuple的形式给出,通常原数组有多少维,输出的tuple中就包含几个数组,分别对应符合条件元素的各维坐标。
21.3 利用where 修改数组的值
22.利用set去重
23. np.concatenate
numpy.concatenate((a1, a2, ...), axis=0, out=None)
24. np.meshgrid()
meshgrid(*xi, **kwargs)
从一个坐标向量中返回一个坐标矩阵
参数:
x1,x2...,xn:数组,一维的数组代表网格的坐标。
indexing:{'xy','ij'},笛卡尔坐标'xy'或矩阵'ij'下标作为输出,默认的是笛卡尔坐标。
sparse:bool类型,如果为True,返回一个稀疏矩阵保存在内存中,默认是False。
copy:bool类型,如果是False,返回一个原始数组的视图保存在内存中,默认是True。如果,sparse和copy都为False,将有可能返回一个不连续的数组。而且,如果广播数组的元素超过一个,可以使用一个独立的内存。如果想要对这个数组进行写操作,请先拷贝这个数组。
返回值:x1,x2,....,xn:ndarray(numpy数组)
numpy中的meshgrid函数 - 修炼之路 - CSDN博客
reference:
python 科学计算 — numpy 学习笔记 - 细语呢喃
https://blog.csdn.net/sinat_29957455/article/details/78825945