Numpy基础

浅学了一点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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球