Numpy学习笔记

Numpy笔记

1指定numpy类型
a = np.array([3,4,5],dtype=np.int)
Numpy数据类型:

数据类型简介
bool存储为一个字节的布尔值(真或假)
int默认整数,相当于 C 的long,通常为int32或int64
int8(-128 ~ 127)
int16(-32768 ~ 32767)
int32(-2147483648 ~ 2147483647)
int6464 位整数(-9223372036854775808 ~ 9223372036854775807)
uint88 位无符号整数(0 ~ 255)
uint1616 位无符号整数(0 ~ 65535)
uint3232 位无符号整数(0 ~ 4294967295)
uint64双精度浮点:符号位,11 位指数,52 位尾数
floatfloat64的简写
float16半精度浮点:符号位,5 位指数,10 位尾数
float32单精度浮点:符号位,8 位指数,23 位尾数
float64双精度浮点:符号位,11 位指数,52 位尾数
complexcomplex128的简写
complex64复数,由两个 32 位浮点表示(实部和虚部)
complex128复数,由两个 64 位浮点表示(实部和虚部)

1.创建0矩阵

a = np.zeros((3,3))
print(a)

[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]

2.创建全为1的矩阵

 b = np.ones((3,3))
 print(b)

[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]

3.创建空矩阵

c = np.empty((3,3))
print(c)

[[0.000e+000 0.000e+000 0.000e+000]
[0.000e+000 0.000e+000 2.154e-321]
[0.000e+000 0.000e+000 0.000e+000]]

4.np.arange(start,end,step)

返回一个有终点和起点的固定步长的排列
**注:**range()返回的是range object,而np.nrange()返回的是numpy.ndarray()
range可用于迭代,而np.nrange作用远不止于此,它是一个序列,可被当做向量使用。
range()不支持步长为小数,np.arange()支持步长为小数

a = range(4)
b = list(range(4))
print(a)
print(b)

range(4)
[0,1,2,3]

np.arange(1, 5,0.5)

array([ 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5])

for i in np.arange(3,8)
	print(i)

3
4
5
6
7

5.np.reshape((m,n))或np.reshape(m,n)

given a new shape without changing its values

m = np.arange(12).reshape(3,4)
print(m)

[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]

6.np.linspace(start,end,num)

start:起点
end:终点
num:样本数

7.Numpy输出大于或小于某数

a = np.arange(10)
kk = a[a>5]
print(kk)

[6,7,8,9]

8.Numpy的乘法

  1. 矩阵元素相乘
a = np.arange(1,5).reshape(2,2)
b = [[2,4],
      [2,5]]
ele_mul = a * b
print(ele_mul)

[[ 2 8]
[ 6 20]]

  1. 矩阵相乘: np.dot(a,b) 或 a.dot(b)
a = np.arange(1,5).reshape(2,2)
b = [[2,4],
      [2,5]]
mat_mul_1 = np.dot(a,b)
mat_mul_2 = a.dot(b)
print(mat_mul_1,'\n',mat_mul_2)

[[ 6 14]
[14 32]]

[[ 6 14]
[14 32]]

9.产生随机数矩阵

np.random.random((m,n))产生一个m行n列的矩阵,矩阵元素从0到1
np.random.randint(low,high,size)
if low = num high = None , 返回一个在0到low之间的随机的整型数
if low = num1 high = num2 , 返回一个在low和high之间的随机的整型数
if low = num high = num2 , size=(m,n)返回一个在m行n列的矩阵,其元素是low和high之间的随机的整型数

a = np.random.random((2,4))
b = np.random.randint(4,10,size=(2,2))
print(a)
print(b)

[[0.01297459 0.50184808 0.42188505 0.66899733]
[0.40261174 0.56879188 0.16265641 0.50428789]]
[[7 6]
[5 6]]

10.np.max,np.min,np.sum

函数功能
np.max(array)求矩阵中最大的值
np.min(array)求矩阵中最小的值
np.sum(array)求矩阵中求和的值

np.sum(array,axis=1) 求矩阵行之和(对于二维数组)
np.sum(array, axis=0)求矩阵列之和(对于二维数组)
axis=0代表往跨行(down),而axis=1代表跨列(across)(二维数组)
三维数组:axis= 0跨第一维度即页,axis=1跨行,axis=0跨列

a = [[2,3,4],
     [3,2,4]]
print(np.max(a,axis=1))
print(np.max(a,axis=0))

[4 4]
[3 3 4]

a = np.arange(12).reshape((3,2,2))
print(np.sum(a,axis=0))
print(np.sum(a,axis=1))

[[12 15]
[18 21]]
[[ 2 4]
[10 12]
[18 20]]

11.Numpy其他函数

函数功能
np.argmin()返回矩阵中最小值的索引
np.argmax()返回矩阵中最大值的索引
np.mean()或array.mean()返回矩阵中平均值
np.average()返回矩阵中平均值,可以算加权算术平均值,weights
np.median()求中位数
np.cumsum()累加矩阵
np.diff()沿着指定轴计算第N维的离散差值
np.eyes(n)创建n维度的单位矩阵
a = np.array([2,4,6,85,1,5,3,3])
a = a.reshape(2,4)
print(a)
print(np.argmin(a))
print(np.mean(a))
print(np.average(a))
print(np.cumsum(a))
print( np.diff(a))

[[ 2 4 6 85]
[ 1 5 3 3]]
4
13.625
13.625
[ 2 6 12 97 98 103 106 109]
[[ 2 2 79]
[ 4 -2 0]]

12.迭代行和列

a = np.arange(3,15).reshape(3,4)
print(a)
print(a.T)

[[ 3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]]
[[ 3 7 11]
[ 4 8 12]
[ 5 9 13]
[ 6 10 14]]

#迭代行
for row in a:
	print(row)
#迭代列
for column in a.T:
	print(colum)

[3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]
[ 6 10 14]

13.flat和flatten(将数组转换为1-D)

flat()返回一个迭代器
flatten()返回一个1-D序列

for item in a.flat:
    print(item)
print(a.flatten())

3
4
5
6
7
8
9
10
11
12
13
14
[ 3 4 5 6 7 8 9 10 11 12 13 14]

14. Numpy合并

np.vstack((a,b)) vertical stack 垂直方向的合并
np.hstack((a,b)) horizontal 水平方向的合并

a = np.array([1,1,1])
b = np.array([2,2,2])
c = np.vstack((a,b))  #vertical stack  垂直方向的合并
d = np.hstack((a,b)) #horizontal 水平方向的合并

[[1 1 1]
[2 2 2]]
[1 1 1 2 2 2]

15.序列增加维度

a = np.array([1,1,1])
print(a[:,np.newaxis])
print(a[np.newaxis,:])
print(a)

[[1]
[1]
[1]]
[[1 1 1]]
[1 1 1]

16.np.concatenate

np.concatenate((m,n),axis= )数组拼接
默认是 axis = 0,对0轴的数组对象进行纵向的拼接(横向的拼接沿着axis= 1方向);注:一般axis = 0,就是对该轴向的数组进行操作,操作方向是另外一个轴,即axis=1。

a = np.array([[1, 2], [5, 7]])
b = np.array([[5, 6]])
np.concatenate((a, b), axis=0)

[[1, 2],
[5, 7],
[5, 6]]

传入的数组必须具有相同的形状,这里的相同的形状可以满足在拼接方向axis轴上数组间的形状一致即可
如果对数组对象进行 axis= 1 轴的拼接,方向是横向0轴,a是一个22维数组,axis= 0轴为2,b是一个12维数组,axis= 0 是1,两者的形状不等,这时会报错

np.concatenate((a,b),axis = 1)

正确的做法应该是

np.concatenate((a,b.T),axis = 1)

17.Numpy分割

函数用法
np.split(array,indices_or_sections,axis=0)指定分隔符对字符串进行切片
np.hsplit(array,indices_or_sections,axis=0)指定分隔符对字符串进行水平方向切片
np. vsplit(array,indices_or_sections)指定分隔符对字符串进行垂直方向切片
np. dsplit(array,indices_or_sections)对矩阵沿深度方向切片
np.array_split(array,indices_or_sections)对矩阵进行不等分的切片
a = np.arange(16).reshape(4,4)
print(np.vsplit(a,2))

[array([[0, 1, 2, 3],
[4, 5, 6, 7]]), array([[ 8, 9, 10, 11],
[12, 13, 14, 15]])]

a = np.arange(16).reshape(4,4)
print(np.hsplit(a,2))

[array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]]), array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])]

a = np.arange(16).reshape(4,4)
print(np.split(a,2,axis=1))

[array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]]), array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])]

 b = np.arange(64).reshape(4,4,4)

[array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]]]), array([[[16, 17, 18, 19],
[20, 21, 22, 23],
[24, 25, 26, 27],
[28, 29, 30, 31]]]), array([[[32, 33, 34, 35],
[36, 37, 38, 39],
[40, 41, 42, 43],
[44, 45, 46, 47]]]), array([[[48, 49, 50, 51],
[52, 53, 54, 55],
[56, 57, 58, 59],
[60, 61, 62, 63]]])]

a = np.arange(12).reshape(3,4)
print(np.array_split(a,3,axis=1))

[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]

18.深拷贝和浅拷贝

a = np.arange(12).reshape((3,4))
b = a
b[0][0] = 12
print(a)

aa = np.arange(12).reshape((3,4))
bb = a.copy()
bb[0][0] = 12
print(aa,bb)

[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]] [[12 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值