Numpy & Pandas入门
安装
pycharm –> preference –> project Interpreter –> 左下角的加号 –> 弹出搜索框搜索 –> install Package
所有第三方模块的安装都可以通过这种办法。
版本是pycharm 2018.1.1
numpy
基础运算1
array()
将传入的参数转化为矩阵
A = np.array([[1,2,3],[5,6,7]])
属性
print(A.ndim) #维度
print(A.shape) #行数, 列数
print(A.size) #元素个数
指定数据类型
A = np.array([[1,2,3],[5,6,7]], dtype=int)
numpy有很多数据类型,可以在此指定。
创建全零矩阵
a = np.zeros((3, 4))
创建全1矩阵
a = np.ones((3, 4))
创建全空矩阵
a = np.empty((5, 6))
其中的元素都是接近于0的数。
arange()
创建连续数组,可指定步长
reshape改变数据的形状
https://blog.csdn.net/xiaoqinting2015/article/details/69936952
如果shape参数的最后边是0,代表可以自动推测出该数值大小。
np.reshape(a,(2, -1))
linspace创建等差数列
print(np.linspace(0,10,5))
基础运算2
乘法:
a * b
点乘
numpy.dot(a, b)
矩阵乘法
a.dot(b)
矩阵乘法
b**2
b矩阵各个元素的平方,双星符号
axis参数
在sum()、min()、max()中,参数axis:
axis = 0:按列查找
axis = 1:按行查找
最小元素索引与最大元素索引
print(np.argmin(A))
print(np.argmax(A))
这个索引是从第一个元素开始,按照行排序,如下所示:
0 1 2 3
4 5 6 7
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
所以这个矩阵的输出结果是:
0
11
但是还有一套索引,分为一维索引和多维索引。见下。
累加函数
a.cumsum()
numpy.cumsum(a)
原矩阵首项加到对应项的元素之和。
是一个行向量,元素个数与原矩阵元素个数相同。
累差函数
每一行,后一项与前一项之差。
比原矩阵少一列。
numpy.diff(a)
nonzero()
B = np.nonzero(A)
将矩阵A的所有非零元素提出来,将这些非零元素的行坐标作为一个行向量,非零元素的列坐标作为第二个行向量。
(array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2]), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]))
#前一个是行,后一个是列
sort()
对矩阵按行排序。
也就是对每一行进行排序。行与行之间不排序。
np.sort(A)
转置
两种转置:
np.transpose(A)
A.transpose()
A.T
A.T
不支持一维数组的转置。
np.transpose(A)
也不支持,因为一维数组就一个轴。
四种一维数组转置的办法:
#一种一维矩阵的转置方法
#不懂这种玩法
D = np.arange
print(D)
F = np.transpose([D]) # []
print(F)
#reshape转置一维向量
A = np.array([1,2,3])
print(A.reshape(len(A), -1))
A = np.array([1,2,3])
print(A[:, None])
第二种、第三种、第四种办法(下边的newaxis)是给矩阵增加了一个轴。矩阵仍然是原来的那个矩阵,A和B仍然指向同一个地址。改变A,输出B,结果根据A的改变发生变化。
第一种办法复制了另一个矩阵出来。
A = np.array([1,2,3])
print(A.shape)
B = A[:, None]
print(B.shape)
输出:
(3,)
(3, 1)
newaxis()
axis是轴心的意思。
对于一维向量。可以利用newaxis()
完成转置。
D = np.arange(30, 10, -2)
print(D)
print(D[np.newaxis, :]) # 轴心不变,不转置
print(D[:, np.newaxis]) # 轴心变到另一个纬度,转置
换轴心transpose()
转置是换轴心的一种情况。
https://blog.csdn.net/u012762410/article/details/78912667
clip()
clip(Array,Array_min,Array_max)
把矩阵中比最小值小对元素变成最小值;比最大值大对变成最大值。剪掉了蛇的头和尾巴。剃头。
索引
下标都是从0开始的。
一维索引
对一维向量:
a[2]就是从左往右第三个元素。
对二维矩阵:
a[2]是第三行。
对三维矩阵:
…
二维索引
对二维矩阵:
二维索引定位到一个元素
可以利用切片
for循环是按行输出矩阵。
如果要按列输出矩阵,可以先将矩阵转置。
flatten
将矩阵展开成一个一维向量。
a.flatten()
flat
和flatten功能一样,但是flat是一个迭代器,需要的时候才迭代输出元素。
for item in A.flat
print(item)
输出:
2
3
4
5
6
7
8
9
10
11
12
13
合并矩阵
np.vstack((A, B))
将两个矩阵上下合并。
np.vstack((A, B))
np.hstack((A, B))
将两个矩阵左右合并。
np.hstack((A, B))
concatenate()
合并矩阵
concatenate((A, B), axis = 0)
axis = 0 :上下合并;
axis = 1 :左右合并;
分割矩阵
np.split()
A = np.arange(2, 14).reshape((3, 4
print(np.split(A, 4, axis=1))
axis = 0 :横向分割
axis = 1 :纵向分割
中间的参数叫indices or sections,也就是分的块数。
只能等量分割。一个一行四列的矩阵不能纵向分割成三块。
vsplit()
np.vsplit(A, 3)
split的axis为0的情况。
hsplit()
np.hsplit(A, 2)
split的axis为1的情况。
array_split() 不等量分割矩阵
np.array_split()
A = np.arange(2, 14).reshape((3, 4))
print(np