慕课网课程学习笔记
学习环境 win10 + 虚拟机centos7 + python3
Anaconda /,ænə’kɑndə/
Anaconda 是最著名的Python数据科学平台,750+ 流行的Python&R包
source activity python34 # linux中
source deactivate python34 # linux 中
拓展:从IPython 到 Jupyter
用 json message 通过 ZeroMQ 和 notebook 交互
官网下载好 Anaconda的 .sh 文件后
使用SecureCRT的sftp上传到 centos 中
sftp 的一些命令:lpwd 查看本地物理机所在目录,cld 进入本地目录,put 上传文件到 远程机
如果是桌面版 centos 可直接在虚拟机里访问即可
或者本地机安装直接使用
可以将远端服务器一个端口remote_port绑定到本地端口port,其中-C是进行数据压缩,-f是后台操作,只有当提示用户名密码的时候才转向前台。-N是不执行远端命令,在只是端口转发时这条命令很有用处。-g 是允许远端主机连接本地转发端口。-R表明是将远端主机端口映射到本地端口。如果是-L,则是将本地端口映射到远端主机端口。
接着浏览器访问:
数据科学领域 5个 常用Python库
Numpy/Scipy/Pandas/Matplotlib/Scikit-learn
Numpy文档
矩阵加减运算两个矩阵必须要有相同的行和列
数组乘法(点乘)
m * n的矩阵 C 为A与B的乘积,记 C=AB,其中矩阵C中的第 i 行第 j 列元素可以表示为:
import numpy as np
# 创建 列表
list_1 = [1,2,3,4]
list_1
[1, 2, 3, 4]
array_1 = np.array(list_1) #创建一维数组
array_1
array([1, 2, 3, 4])
list_2 = [5,6,7,8]
array_2 = np.array([list_1,list_2]) # 创建二维数组
array_2
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
array_2.shape # 返回数组 维数
(2, 4)
array_2.size # 返回数组元素个数
8
array_2.dtype # 返回数组元素类型 (这里的元素类型一致)
dtype('int32')
array_3 = np.array([[1.0,2,3],[4.0,5,6]]) # 数据类型不同的数组
array_3.dtype # 数据类型不一致,取精确度最高的
dtype('float64')
array_4 = np.arange(1,10) # 通过arange() 函数创建 数组
array_4 # np.arange(始,终,步长)
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
np.zeros(5) # 一维全 0 矩阵
array([0., 0., 0., 0., 0.])
np.zeros([2,3]) # 二维全 0 矩阵
array([[0., 0., 0.],
[0., 0., 0.]])
np.eye(5) # 5 * 5 单位矩阵
array([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
a = np.arange(1,10)
a
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
a[1]
2
a[1:5] # 访问2到5元素
array([2, 3, 4, 5])
b = np.array([[1,2,3],[4,5,6]])
b
array([[1, 2, 3],
[4, 5, 6]])
b[1][2] # 访问二维数组 注意起始是 0 或者 b[1,0]
6
c = np.array([[1,2,3],[4,5,6],[7,8,9]])
c
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
c[:2,1:] # 二维数组的切片操作
array([[2, 3],
[5, 6]])
import numpy as np
np.random.randn(10) # 符合标准正态分布
array([-0.44773486, -1.02510785, -1.29485893, -1.26046504, 0.62437175,
-0.32248227, -0.64261711, 0.79787437, 2.40994751, 0.83609302])
np.random.randint(10) # 随机返回一个 10 以内的数
6
np.random.randint(10,size=(2,3)) # 返回 10 以内的 2 行 3 列 数组
array([[0, 3, 2],
[5, 4, 6]])
np.random.randint(10,size=20).reshape(4,5) # 将 20 个元素的一维变为 二维
array([[3, 5, 9, 8, 4],
[4, 6, 1, 8, 8],
[2, 4, 5, 6, 9],
[2, 5, 4, 7, 6]])
a = np.random.randint(10,size=20).reshape(4,5)
a
array([[2, 6, 4, 3, 2],
[0, 6, 3, 4, 0],
[8, 1, 1, 5, 6],
[5, 0, 0, 1, 9]])
b = np.random.randint(10,size=20).reshape(4,5)
b
array([[4, 4, 7, 3, 3],
[2, 4, 2, 1, 5],
[8, 8, 8, 8, 1],
[0, 9, 1, 9, 4]])
a + b
array([[ 6, 10, 11, 6, 5],
[ 2, 10, 5, 5, 5],
[16, 9, 9, 13, 7],
[ 5, 9, 1, 10, 13]])
a - b
array([[-2, 2, -3, 0, -1],
[-2, 2, 1, 3, -5],
[ 0, -7, -7, -3, 5],
[ 5, -9, -1, -8, 5]])
a * b
array([[ 8, 24, 28, 9, 6],
[ 0, 24, 6, 4, 0],
[64, 8, 8, 40, 6],
[ 0, 0, 0, 9, 36]])
a / b # 遇到 被除数为 0 时 --- inf
C:\myapp\Anaconda3\lib\site-packages\ipykernel_launcher.py:1: RuntimeWarning: divide by zero encountered in true_divide
"""Entry point for launching an IPython kernel.
array([[0.5 , 1.5 , 0.57142857, 1. , 0.66666667],
[0. , 1.5 , 1.5 , 4. , 0. ],
[1. , 0.125 , 0.125 , 0.625 , 6. ],
[ inf, 0. , 0. , 0.11111111, 2.25 ]])
np.mat([[1,2,3],[4,5,6]])
matrix([[1, 2, 3],
[4, 5, 6]])
a
array([[2, 6, 4, 3, 2],
[0, 6, 3, 4, 0],
[8, 1, 1, 5, 6],
[5, 0, 0, 1, 9]])
np.mat(a) # 数组转换为矩阵
matrix([[2, 6, 4, 3, 2],
[0, 6, 3, 4, 0],
[8, 1, 1, 5, 6],
[5, 0, 0, 1, 9]])
A = np.mat(a)
A
matrix([[2, 6, 4, 3, 2],
[0, 6, 3, 4, 0],
[8, 1, 1, 5, 6],
[5, 0, 0, 1, 9]])
B = np.mat(b)
B
matrix([[4, 4, 7, 3, 3],
[2, 4, 2, 1, 5],
[8, 8, 8, 8, 1],
[0, 9, 1, 9, 4]])
A + B
matrix([[ 6, 10, 11, 6, 5],
[ 2, 10, 5, 5, 5],
[16, 9, 9, 13, 7],
[ 5, 9, 1, 10, 13]])
A * B # 只有当矩阵 A的列数与矩阵 B的行数相等时 A× B才有意义
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
in ()
----> 1 A * B
C:\myapp\Anaconda3\lib\site-packages\numpy\matrixlib\defmatrix.py in __mul__(self, other)
307 if isinstance(other, (N.ndarray, list, tuple)) :
308 # This promotes 1-D vectors to row vectors
--> 309 return N.dot(self, asmatrix(other))
310 if isscalar(other) or not hasattr(other, '__rmul__') :
311 return N.dot(self, other)
ValueError: shapes (4,5) and (4,5) not aligned: 5 (dim 1) != 4 (dim 0)
a = np.mat(np.random.randint(10,size=20).reshape(4,5))
a
matrix([[3, 4, 1, 5, 2],
[3, 7, 8, 7, 3],
[4, 2, 6, 9, 6],
[4, 4, 5, 2, 7]])
b = np.mat(np.random.randint(10,size=20).reshape(5,4))
b
matrix([[9, 6, 0, 4],
[4, 3, 6, 5],
[4, 6, 1, 8],
[4, 4, 3, 5],
[2, 1, 1, 1]])
a * b
matrix([[ 71, 58, 42, 67],
[121, 118, 74, 149],
[116, 108, 51, 125],
[ 94, 81, 42, 93]])
a = np.random.randint(10,size=20).reshape(4,5)
np.unique(a) # 返回 不重复的值
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a
array([[0, 5, 3, 2, 7],
[8, 0, 1, 7, 6],
[2, 0, 9, 8, 2],
[7, 1, 2, 9, 4]])
sum(a) # 返回一个数组 列和
array([17, 6, 15, 26, 19])
sum(a[0]) # 返回某一行和
17
sum(a[:,1]) # 返回某一列和
6
a.max() # 返回最大值
9
max(a[0]) # 第 0 行最大值
7
import pickle
import numpy as np
x = np.arange(10)
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
f = open('x.pkl','wb')
pickle.dump(x,f)
!ls
Array.ipynb
Untitled.ipynb
x.pkl
鏁扮粍涓庣煩闃佃繍绠�.ipynb
f = open('x.pkl','rb')
pickle.load(f)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
### 使用 save 函数序列化保存
np.save('one_array',x)
!ls
Array.ipynb
Untitled.ipynb
one_array.npy
x.pkl
鏁扮粍涓庣煩闃佃繍绠�.ipynb
np.load('one_array.npy')
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
y = np.arange(20)
y
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19])
np.savez('two_array.npz',a=x,b=y)
!ls
Array.ipynb
Untitled.ipynb
one_array.npy
two_array.npz
x.pkl
鏁扮粍涓庣煩闃佃繍绠�.ipynb
c = np.load('two_array.npz') # 多个
c['a']
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
c['b']
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19])