import numpy as np
#第三章 numpy 的基本属性
'''
array = np.array([[1,2,3],[2,3,4]]) 确定一个数组 其中不要忘了括号的问题
print(array)
print('num of dim',array.ndim) 数组的维数,也就是行
print('shape',array.shape) 数组的形状,返回的是(2,3)也就是行和列
print('size',array.size) 数组中数值的多少
'''
#第四章 numpy中数组或矩阵的创建
'''
a = np.array([2,3,4],dtype=np.int64)
print(a.dtype) 查看数组中数值的类型
b = np.array([2,3,4],dtype=np.float64)
print(b.dtype)
#一个数组中类型非常多,有int16 32 64 等,如果位数大,所占空间就会变大,运算的速度会变慢,但是精度会增加
array = np.array([[1,2,3],
[2,3,4]])
print(array)
a = np.zeros((3,4)) 生成一个3行4列的0矩阵
print(a)
a = np.ones((3,4),dtype=np.int16) 生成一个3行4列元素全部为1的类型为16位整型的矩阵
print(a)
a = np.empty((3,4))生成了一个非常接近0的矩阵
print(a)
a = np.arange(10,20,2) 生成一个步长为2的矩阵
print(a)
a = np.arange(14,2,-1) 生成一个步长为-1的矩阵
b = np.arange(4) 生成一个从0到3,步长为默认值1 的数列
!!!!a = np.arange(12).reshape(3,4)生成一个从0到11!!!!!,3行4列的矩阵
print(a)
a = np.linspace(1,10,5) 生成一个线性数据,从1到10,一共分成五段
print(a)
a = np.linspace(1,10,6).reshape(2,3) reshape 也可以用
print(a)
'''
#第五章numpy的基础运算
'''
a = np.array([10,20,30,40])
b = np.arange(4) 生成一个
c = b**2 直接把每一个数字都平方
a = np.array([10,20,30,40])
b = np.arange(4)
c = 10*np.sin(a)对a中的值先求正弦,然后用10乘
print(c)
a = np.array([10,20,30,40])
b = np.arange(4)
print(b<3) 返回的值为t或者f,同样是一个矩阵,里面的值是char类型的
print(b==3) 返回的值为t或者f,同样是一个矩阵,里面的值是char类型的
a = np.array([[1,1],
[0,1]])
b = np.arange(4).reshape(2,2)
print(a)
print(b)
c = a * b
c_dot = np.dot(a,b)
c_dot_2 = adot(b) 上下两个一样的
print(c) 各个元素逐个相乘
print(c_dot) 按照矩阵的乘法运算法则来进行
a = np.random.random((2,4))
print(a)
b = np.sum(a,axis=1) 求每一行中的和
c = np.min(a,axis=0) 求每一列的最小值
d = np.max(a,axis=1) 求每一行的最大值
a = np.arange(2,14).reshape(3,4)
c = np.argmin(a)
#找出来这里面的最小值是在哪个位,2最小在第一个位置,arg是0
#argmax同样的
print(c)
x = np.mean(a)
y = a.mean()
z = np.average(a)
x1 = np.median(a) 中位数
x2 = np.cumsum(a) 这是把每一个数前面的一个数加到它身上,形成一个1维的数组,这个数组有n个元素
如
[ 2 5 9 14 20 27 35 44 54 65 77 90]
x3 = np.diff(a) 这是累差,把每个数减去前面一个数 ,原来有12个数,最后只会剩下9个,按照行来进行计算,只减同行的
如[[1 1 1] x12-x11 x13-x12 x14-x13
[1 1 1]
[1 1 1]]
a = np.arange(2,14).reshape(3,4)
x4 = np.nonzero(a) 返回非零元素的位置,如
print(x4)
如
(array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64),
array(a[0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
a = np.random.random((3,4))
print(a)
x5 = np.sort(a) 进行逐行的排序,每行求出最小值
print(x5)
如
[[0.07480998 0.60622102 0.71319619 0.94586877] 只是逐行进行排序
[0.12604709 0.54268197 0.74713671 0.9641129 ]
[0.09905505 0.2827937 0.79104972 0.88298559]]
a = np.random.random((3,4))
print(a)
x6 = np.transpose(a) 转置
x7 = (a.T) 同样也是转置,这样的写法更加的方便
print(x6)
print(x7)
a = np.arange(14,2,-1).reshape((3,4))
print(a)
x8= np.transpose(a)
x9 = (a.T)
x10 = (x9.dot(a)) ATA 转置乘以本体,矩阵的乘法要求同样的行数乘以同样的列数,行*列
x11 = (x8.dot(a))
print(x10)
print(x11)
a = np.arange(14,2,-1).reshape((3,4))
print(a)
x12 = np.clip(a,5,10) 把小于5大于10的数全都变成5和10
print(x12)
a = np.arange(14,2,-1).reshape((3,4))
print(np.mean(a,axis=0)) 按照列来进行求平均值
print(np.mean(a,axis=1)) 按照行来进行求平均值,最后输出的是一个数组
'''
#第六章 np的索引
'''
a = np.arange(3,15).reshape((3,4))
print(a)
print(a[3]) 输出排在第四为的数组数值,也就是6
print(a)
print(a[2]) 输出这个数组的第三行
print(a[1][1]) 输出这个数组第二行第二列
print(a[1,1]) 同上
print(a[3,:]) 打印第二行所有数
print(a[:,2]) 打印第一列的所有数
print(a[2,1:3]) 打印第三行,从第二个位置到第三个位置的数 输出的值为数组,一个数也是数组
a = np.arange(3,15).reshape((3,4))
print(a)
[[ 3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]]
print(a.T)
[[ 3 7 11]
[ 4 8 12]
[ 5 9 13]
[ 6 10 14]]
for column in a:
print(column)
打印行,每一行按照数组的形式打印出
[3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]
for row in a:
print (row)
[3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]
和上面的一样????
for column in a.T:
print(column)
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]
[ 6 10 14]
以转置的形式
print(a.flatten())
print(a.flat)
#flatten返回一个函数,flat返回一个object
for item in a.flat:#迭代器是个啥
print(item)
'''
#第七章array的合并
'''
a = np.array([1,1,1])#这两个都是以数组的
b = np.array([2,2,2])
x1 = a[:,np.newaxis]
x2 = b[:,np.newaxis]
#在列上加了一个维度
x3 = a[np.newaxis,:]
x4 = b[np.newaxis,:]
#在行上增加一个维度
x5 = np.vstack((x3,x4))
#这样x5 变成了一个两行三列的矩阵,因为本来的x3,x4分别是一个一行三列的矩阵
x6 = np.hstack((x1,x2))
print(x5,x6)
x7 = np.concatenate((a,b,b),axis=0)
print(x7)
#这样输出的x7 也只有一维度仍旧是一个数组,而不是一个矩阵
x8 = np.concatenate((x2,x2,x1),axis=1)
print(x8)
#相比较而言,concatenate这个函数可以在后面定义在哪一个维度上进行数组或者矩阵的合并
'''
#第八章 array的分割
'''
a = np.arange(12).reshape((3,4))
print(a)
x1 = np.split(a,2,axis=1)
print(x1)
#等项分割
x2 = np.array_split(a,3,axis=1)
#不等项分割
x3 = np.vsplit(a,3)
#水平方向上额的不等量分割
x4 = np.hsplit(a,2)
#竖直方向上额的不等量分割
print(x3)
print(x4)
'''
'''
#第九章 numpy的赋值
a = np.arange(4)
print(a)
b = a
#直接变成了a
c = a
#直接变成了a
d = b
#直接变成了a
a[0] = 11
print(a,b,c,d)
b is a
#会返回一个true或者faul
print(b is a)
#现在abcd完全一样
b = a.copy # deepcopy 只是赋值,并不关联
'''