浅学了一点numpy,努力向机器学习方向学习!听了慕课老师的课总结一下,如有不对,请大佬指正!
import numpy
numpy.__version__
import numpy as np
np.__version__
L = [i for i in range(10)]
L
L[4]
L[5] = 'Machine Learning'
L
相对来说,下面这个效率更高一点
import array
arr = array.array('i',[i for i in range(10)])
arr
arr[5] = 100
arr
arr[5] = 'Machine Learning'
nparr=np.array([i for i in range(10)])
nparr
nparr.dtype
nparr[5]=5.0
nparr[5]=5.005004
nparr2=np.array([1,2,3.3])
nparr2.dtype
np.zeros(10)
np.zeros(10).dtype
np.zeros(10,dtype=int).dtype
np.ones(10)
np.full((3,5),1)
[i for i in range(0,20,2)]
[i for i in range(0,20,0.2)]
np.arange(0,20,2)
np.arange(0,1,0.2)
array([0. , 0.2, 0.4, 0.6, 0.8])
np.linspace(0,20,10)
np.random.randint(0,10)
np.random.randint(0,10,10)
np.random.randint(0,1,10)
有时候有必要把属性写出来,因为有时候可能会分不清哪个是哪个,比如
np.random.randint(4,8,10)
所以,写上会清楚一点
np.random.randint(4,8,size=10)
np.random.randint(4,8,size=(3,5))
还有一点,每次random出来的都不一样,有时候调试会很麻烦,所以用随机种子
np.random.seed(666)
np.random.randint(4,8,size=(3,5))
np.random.seed(666)
np.random.randint(4,8,size=(3,5))
np.random.random()
np.random.random()
np.random.random((3,5))
np.random.normal()
np.random.normal(10,100)
np.random.normal(0,1,(3,5))
import numpy as np
x=np.arange(10)
X=np.arange(15).reshape(3,5)
X
基本属性
x.ndim
X.ndim
x.size
X.size
X.shape
numpy.array的数据访问
X
X[0]
X[-1]
X[0][0]
X[(0,0)]
x[:5]
x[::2]
x[::-1]
X
X[:2,:3]
X[:2][:3]
X[:2,::2]
X[::-1,::-1]
X[0]
X[:,0]
subX=X[:2,:3]
subX
subX[0,0]=100
subX
X
当修改元素时,发现X也变化了。当我们使用copy()函数时,就不会变化
subX=X[:2,:3].copy()
subX
subX[0,0]=100
subX
X
reshape
继续刚才的操作
x.shape
x.ndim
x.reshape(2,5)
x.reshape(10,-1)
x.reshape(2,-1)
合并操作
x=np.array([1,2,3])
y=np.array([3,2,1])
x是一个1 * 3的向量,y是一个1 * 3的向量,我现在想要一个1 * 6的
使用concatenate,但是 只能处理维度相同的数组
np.concatenate([x,y])
z=np.array([666,666,666])
np.concatenate([x,y,z])
A=np.array([[1,2,3],
[3,2,1]])
np.concatenate([A,A])
np.concatenate([A,A])
1
np.concatenate([A,A])
np.concatenate([A,A],axis=1)
np.concatenate([A,A],axis=0)
假如维度不同呢
解决办法,把z转换1 * 3的
z=np.array([666,666,666])
np.concatenate([A,z])
A2=np.concatenate([A,z.reshape(1,-1)])
堆叠数据,vstack和hstack
np.vstack([A,z])
B=np.full((2,2),100)
B
np.hstack([A,B])
分割操作
x=np.arange(10)
x
分割
一维数组
x1,x2,x3=np.split(x,[3,7])
x1,x2,x3
x1,x2=np.split(x,[5])
二维数组
A=np.arange(16).reshape((4,4))
A
A1,A2=np.split(A,[2])
A1
A2
A1,A2=np.split(A,[2],axis=1)
A1
也可以这样
upper,lower=np.vsplit(A,[2])
upper
lower
left,right=np.hsplit(A,[2])
left
data=np.arange(16).reshape((4,4))
data
在机器学习中,一班最后一列是label,需要把他分开
X,y=np.hsplit(data,[-1])
X
y
y[:,0]
n=1000000
L=[i for i in range(n)]
L
想要输出2倍怎么算?
2*L
不是
可以这样
A=[]
for e in L:
A.append(e*2)
A
在来看看时间消耗
%%time
A=[]
for e in L:
A.append(e*2)
%%time
A=[2*e for e in L]
%%time
A=np.array(2*e for e in L)
%%time
A=2*L
Universal Functions
X=np.arange(1,16).reshape((3,5))
X
X+1
X-1
X*2
X//2
x**2
1/x
np.abs(x)
np.sin(X)
np.cos(X)
np.tan(X)
np.exp(X)
np.power(3,x)
np.log(X)
np.log2(X)
矩阵运算
A=np.arange(4).reshape(2,2)
A
B=np.full((2,2),10)
B
A+B
A-B
A*B
A.dot(B)
A.T
向量和矩阵的运算
v=np.array([1,2])
V
A
[2, 3]])
v+A
np.vstack([v]*A.shape[0])
np.hstack([v]*A.shape[0])
np.vstack([v]*A.shape[0]) +A
np.tile(v,(2,1))
v*A
v.dot(A)
A.dot(v)
矩阵的逆
A
invA=np.linalg.inv(A)
A.dot(invA)
invA.dot(A)
X=np.arange(16).reshape(2,8)
X
np.linalg.inv(X)
pinvX=np.linalg.pinv(X)
pinvX.shape
X.dot(pinvX)
Original: https://blog.csdn.net/qq_45099933/article/details/124432426
Author: 陶柏聿
Title: Numpy基础
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/760160/
转载文章受原作者版权保护。转载请注明原作者出处!