import numpy as np
numpy属性
array = np.array([[1,2,3],[2,3,4]])
print(array)
print(‘number of dim’,array.ndim)
print(‘shape:’,array.shape)
print(‘size’,array.size)
numpy的创建array
创建数组
a = np.array([2,23,4])
print(a)
指定数据
a = np.array([2,23,4],dtype=np.int)
print(a.dtype)
a = np.array([2,23,4],dtype=np.int32)
print(a.dtype)
a = np.array([2,23,4],dtype=np.float)
print(a.dtype)
a = np.array([2,23,4],dtype=np.float32)
print(a.dtype)
创建特定的数据
矩阵
a = np.array([[2,23,4],[2,32,4]])
print(a)
全零数组
a = np.zeros((3,4))
print(a)
创建全一数组,同时指定这些特定数据的dtype
a = np.ones((3,4),dtype=np.int)
a
创建全空数组,其实每个值都是接近零的数
a = np.empty((3,4))
a
用arange创建连续数组
a = np.arange(10,20,2)
a
用reshape改变数据的形状
a = np.arange(12).reshape((3,4))
a
用linspace创建线段型数据
a = np.linspace(1,10,20)
a
a = np.linspace(1,10,20).reshape((5,4))
a
Numpy基础运算1
import numpy as np
a=np.array([10,20,30,40])
b=np.arange(4)
a,b
numpy的几种基本运算
c=a-b
c
c=a+b
c
c=a*b
c
#乘方
c=b**2
c
数学工具,三角函数
c=10*np.sin(a)
c
除了函数应用外,在脚本中对print函数进行一些修改可以进行逻辑判断
print(b<3)
此时由于进行逻辑判断,
返回的是一个bool类型的矩阵,即对满足要求的返回True,不满足的返回False。
上述程序执行后得到的结果是[True True True False]。 需要注意的是,
#如果想要执行是否相等的判断, 依然需要输入 == 而不是 = 来完成相应的逻辑判断。
#上述运算均是建立在一维矩阵,即只有一行的矩阵上面的计算,
如果我们想要对多行多维度的矩阵进行操作,需要对开始的脚本进行一些修改:
a = np.array([[1,1],[0,1]])
b = np.arange(4).reshape((2,2))
print(a)
print(b)
稍显不同的是,Numpy中的矩阵乘法分为两种,
#其一是前文中的对应元素相乘,
#其二是标准的矩阵乘法运算,
#即对应行乘对应列得到相应元素:
矩阵乘法
c_dot = np.dot(a,b)
print(c_dot)
另一种dot的表示方法
c_dot_2 = a.dot(b)
print(c_dot_2)
sum(),min(),max()的使用
import numpy as np
a=np.random.random((2,4))
print(a)
np.sum(a)
np.min(a)
np.max(a)
查找运算
如果你需要对行或者列进行查找运算,
就需要在上述代码中为 axis 进行赋值。
当axis的值为0的时候,将会以列作为查找单元,
当axis的值为1的时候,将会以行作为查找单元。
print(“a =”,a)
print(“sum =”,np.sum(a,axis=1))
print(“min =”, np.min(a,axis=0))
print(“max =”,np.max(a,axis=1))
numpy基础运算2
有关索引的运算
import numpy as np
A = np.arange(2,14).reshape((3,4))
print(np.mean(A))
print(np.average(A))
模仿dot()的使用法则,mean()还有另一种写法
print(A.mean())
同样的,可以写出求解中位数的函数
#print(A.median()) # 用不了?
np.median(A)
和matlab中的cumsum()累加函数类似,Numpy中也具有cumsum()函数
print(np.cumsum(A))
累差运算的函数
print(np.diff(A))
#每一行中后一项与前一项之差。故一个3行4列矩阵通过函数计算得到的矩阵便是3行3列的矩阵。
nonzero()函数
print(np.nonzero(A))
#这个函数将所有非零元素的行与列坐标分割开,重构成两个分别关于行和列的矩阵。
#wo们可以对所有元素进行仿照列表一样的排序操作,
#但这里的排序函数仍然仅针对每一行进行从小到大排序操作:
import numpy as np
A = np.arange(14,2,-1).reshape((3,4))
print(A)
print(np.sort(A))
矩阵的转置有两种表示方法
print(np.transpose(A))
print(A.T)
特别的,numpy里面有clip()函数,例子如下
print(A)
print(np.clip(A,5,9))
Numpy索引
一维索引
类似 a[2] 的索引方法
import numpy as np
A = np.arange(3,15)
print(A[3])
print(A[0])
此时我们将矩阵转化成二维的,然后进行同样的操作
A = np.arange(3,15).reshape((3,4))
print(A[2])
此时对应的实际上是矩阵A从第三行(从0开始算)开始的所有元素
二维索引
A = np.arange(3,15).reshape((3,4))
A
print(A[1][1])
其他表示方法
print(A[1,1])
在python的list中,我们可以利用 : 对一定范围内的元素进行切片操作,
在numpy中我们依然可以给出相应的方法
print(A[1,1:3])
这一表示形式即针对第二行中第2到第4列元素进行切片输出(不包含第4列)。
此时我们适当的利用for函数进行打印
for row in A:
print(row)
此时他会逐行进行打印操作
如果想逐列进行打印,就需要稍微变化一下
for column in A.T:
print(column)
最后说一个关于逐代输出的问题
import numpy as np
A = np.arange(3,15).reshape(3,4)
print(A.flatten())
for item in A.flat:
print(item)
#这一脚本中的flatten是一个展开性质的函数,将多维的矩阵进行展开成1行的数列。
而flat是一个迭代器,本身是一个object属性
numpy array合并
np.vstack() 上下合并
import numpy as np
A = np.array([1,1,1])
A
B = np.array([2,2,2])
B
print(np.vstack((A,B)))
#vertical stack本身属于一种上下合并,即对括号中的两个整体进行对应操作。此时我们对组合而成的矩阵进行属性探究:
C = np.vstack((A,B))
print(A.shape, C.shape)
np.hstack() 左右合并
D = np.hstack((A,B))
print(D)
print(A.shape,D.shape)
np.newaxis() 转置操作
#说完了array的合并,
#我们稍稍提及一下前一节中转置操作
#,如果面对如同前文所述的A序列,
#转置操作便很有可能无法对其进行转置(因为A并不是矩阵的属性),
#此时就需要我们借助其他的函数操作进行转置:
print(A[np.newaxis,:])
print(A[np.newaxis,:].shape)
print(A[:,np.newaxis])
print(A[:,np.newaxis].shape)
结合着上面的知识,我们把它综合起来:
import numpy as np
A = np.array([1,1,1])[:,np.newaxis]
A
B = np.array([2,2,2])[:,np.newaxis]
B
C = np.vstack((A,B))
C
D = np.hstack((A,B))
D
print(D)
print(A.shape,D.shape)
np.concatenate() 合并多个矩阵或序列
#当你的合并操作需要针对多个矩阵或序列时,借助concatenate函数可能会让你使用起来比前述的函数更加方便:
C = np.concatenate((A,B,B,A),axis=0)
C
print©
D = np.concatenate((A,B,B,A),axis=1)
D
print(D)
#axis参数很好的控制了矩阵的纵向或是横向打印,相比较vstack和hstack函数显得更加方便。
Numpy array 分割
创建数据
import numpy as np
A = np.arange(12).reshape((3,4))
print(A)
纵向分割
print(np.split(A,2,axis=1))
C,D = np.split(A,2,axis=1)
C,D
横向分割
print(np.split(A,3,axis=0))
错误的分割
范例的Array只有4列,只能等量对分,因此输入一下程序代码后python会报错
print(np.split(A,3,axis=1))
为了解决这种情况,我们会有下面这种方式
不等量的分割
print(np.array_split(A,3,axis=1))
其他的分割方式
print(np.vsplit(A,3)) # #等于 print(np.split(A, 3, axis=0))
print(np.hsplit(A,2))
Numpy copy & deep copy
= 的赋值方式会带有关联性
首先import numpy 并建立变量,给变量赋值
import numpy as np
a = np.arange(4)
b = a
c = a
d = b
改变a的第一个值,b,c,d,的第一个值也会随之改变
a[0]=11
print(a)
确定b, c, d, 与 a 是否相同
b is a
c is a
d is a
同样,改变d的值,a,b,c也会改变
d[1:3] = [22,33]
print(a)
print(b)
print©
copy的赋值方式没有关联性
b = a.copy()
print(b)
a[2] = 44
print(a)
print(b)