安装:  pip install numpy

    pip install numpy -i https://pypi.douban.com/simple      豆瓣镜像下载

常量:

np.pi  π

创建矩阵数组

 import numpy as np
# array=np.array([[1,2,3],[5,6,7]]) #定义一个2行3列的矩阵数组.2行=2维
# print(array.ndim) #返回矩阵数组的维数
# print(array.shape) #返回矩阵数组的维数和列数。(2, 3)
# print(array.size) #返回矩阵数组的元素总个数
#
# array1=np.array([[1,2,3],[5,6,7]],dtype=np.int) #定义一个矩阵数组
# #dtype 指定每个元素的数据类型 可选
# print(array1.dtype) #返回元素的数据类型。int32
# array2=np.zeros((3,4)) #定义一个元素值都是0,3行4列的矩阵数组
# print(array2)
# array3=np.ones((3,4)) #定义一个元素值都是1,3行4列的矩阵数组
#参数2 可选
dtype="uint8" 指定每个数据的类型,默认浮点型
 # print(array3)
#array4=np.empty((3,4)) #定义一个元素值都是空,3行4列的矩阵数组
#空 值非常接近0 6.23042070e-307
#print(array4)
#array5=np.arange(10,20,2) #定义一个一维n列矩阵数组
#参数1 参数2 数据范围
# 参数3 步长值 [10 12 14 16 18]
#print(array5)
# array6=np.arange(10,33,2).reshape((3,4)) #定义一个3行4列的有序矩阵数组
# print(array6)
#array7=np.linspace(1,10,5) #定义一个一维数组
#元素值是:在1到10之间平均分成5个点。注意包括10
#[ 1. 3.25 5.5 7.75 10. ]
#print(array7)
array8=np.linspace(1,10,6).reshape((2,3)) #定义一个2行3列的矩阵数组
print(array8)

i=np.zeros([4,6,3],np.uint8)      #元素值都是0,产生4个表,每个表是6行3列      np.uint8是数据类型

np.random.rand()     返回一个或一组服从“0~1”均匀分布的随机样本值。随机样本取值范围是[0,1),不包括1

矩阵数组的运算:

矩阵乘法:

只有在第一个矩阵的列数和第二个矩阵的行数相同时才有意义

 import numpy as np
a=np.array([1,2,3,4])
b=np.arange(10,17,2)
x=np.array([[1,2],[10,20]])
y=np.arange(10,17,2).reshape((2,2))
z=np.array([[1,2,3],[10,20,30]])
c=a-b #两个矩阵数组对应元素分别进行计算
c=a**2
c=np.sin(a)
c=a<3 #[ True True False False]
c=x*y #两个矩阵数组对应元素分别进行计算
d=np.dot(x,y) #矩阵乘法[看上面的图]
d=x.dot(y) #矩阵乘法 c=np.random.random((2,3)) #产生一个2行3列的随机数矩阵
#每个元素的随机数在0到1之间
c=np.min(x) #找出最小元素的值
c=np.max(x) #找出最大元素的值
c=np.sum(z,axis=1) #每一行求和 [ 6 60]
c=np.sum(z,axis=0) #每一列求和.[11 22 33]
c=np.argmin(a) #最小值的索引
c=np.argmax(z) #最大值的索引
c=np.average(z) #求全部元素的平均值
c=np.median(z) #找出中位数
#中位数:将数据按照从小到大或从大到小的顺序排列,如果数据个数是奇数,则处于最中间位置的数就是这组数据的中位数;如果数据的个数是偶数,则中间两个数据的平均数是这组数据的中位数
c=np.cumsum(z) #返回各元素与前面元素累加后的一维矩阵。[ 1 3 6 16 36 66]
z=np.array([[100,2,3],[10,20,30]])
c=np.diff(z) #各维 后列减去前列后 的矩阵。[[-98 1] [ 10 10]]
z=np.array([[100,0,3],[10,20,30]])
c=np.nonzero(z) #找出非0元素的位置
#(array([0, 0, 1, 1, 1], dtype=int64), array([0, 2, 0, 1, 2], dtype=int64))
#第一个数组是非0元素的行索引,第二个数组是非0元素的列索引
d=np.transpose(c) #通过行列转换,返回相应的位置矩阵。[[0 0] [0 2] [1 0] [1 1] [1 2]]
# 注意参数c的值
d=z[c] #找出相应位置元素的一维矩阵。[100 3 10 20 30]
#注意参数c的值 c是位置元组
c=np.sort(z) #对各维分别进行排序-升序。[[ 0 3 100] [ 10 20 30]]
z=np.array([[100,2,3,50],[10,20,30,15],[35,86,74,14]])
c=np.transpose(z) #行列转换,行变成列,列变成行
# [[100 10] [ 0 20] [ 3 30]]
c=z.T #与np.transpose(z)相同
c=np.clip(z,5,9)#矩阵z中小于5的元素都等于5,大于9的元素都等于9
#参数2 最小值;参数3 最大值
z=np.array([[10,2,3,50],[10,20,30,15]])
c=np.mean(z) #求所有元素的平均值
c=z.mean() #求所有元素的平均值
c=np.mean(z,axis=1) #各行求平均值。[16.25 18.75]
c=np.mean(z,axis=0) #各列求平均值。[10. 11. 16.5 32.5]
c=a[1] #返回一维矩阵索引号对应的值.3
c=z[1] #多维矩阵就返回行索引对应的矩阵。[10 20 30 15]
c=z[1][1] #返回第一行第一列的值
c=z[1,1] #返回第一行第一列的值
c=z[1,:] #返回第一行的所有元素。[10 20 30 15]
# : 代表所有
c=z[:,1] #返回第一列的所有元素。[ 2 20]
c=z[1,1:3] #返回第一行的1到3的元素
#注意 顾头不顾尾
c=z[0:1,1] #返回第一列的0到1的元素
z=np.array([[10,2,3,50],[10,20,30,15],[100,500,200,800]])
for r in z: #每次返回一行
#print(r)
pass
for r in z.T: #每次返回一列
#print(r)
pass
c=z.flat #把矩阵转换成一维迭代器
c=z.flatten() #把矩阵转换成一维矩阵
for i in z.flat: #每次返回一个元素
#print(i)
pass
a=np.array([[1,2,3,4],[60,20,90,10]])
b=np.array([[500,200,800,444],[2,2,2,2]])
c=a.shape #返回多维矩阵的行数和列数。(2, 4)
c=b.shape #返回一维矩阵的列数.(4,)
c=np.vstack((a,b)) #合拼成一个矩阵
#以行为单位,按行顺序排列
c=np.hstack((a,b)) #合拼成一个矩阵
#以行为单位,按列顺序排列
x=np.array([3,8,4,9])
y=np.array([[5,6,7,8],[10,30,90,50],[500,200,800,444]])
c=y[:,np.newaxis] #多维给每行加一层行嵌套
c=x[:,np.newaxis] #一维给每个元素加一层行嵌套。一行n列变成n行1列
c=x[np.newaxis,:]
d=y[np.newaxis,:] #给矩阵加一个行总嵌套
x=np.array([[3,8,4,9],[500,200,800,444]])
y=np.array([[5,6,7,8],[10,30,90,50]])
c=np.concatenate((x,y,x),axis=0) #合拼成一个矩阵
#以行为单位,按行顺序排列
c=np.concatenate((x,y,x),axis=1) #合拼成一个矩阵
#以行为单位,把每列合拼成一行
y=np.array([[5,6,7,8],[10,30,90,50],[500,200,800,444],[1,2,3,4]])
c=np.split(y,2,axis=0) #分割矩阵【必须均等分】
#把矩阵分层2个
#axis=0 以行分割;
# axis=1 以列分割 [array([[ 5, 6],[ 10, 30],[500, 200],[ 1, 2]]), array([[ 7, 8],[ 90, 50],[800, 444],[ 3, 4]])]
c=np.split(y,2,axis=1)
c=np.array_split(y,3,axis=0) #分割矩阵【可以不均等分】
c=np.vsplit(y,2) #跟np.split(y,2,axis=0)相同
c=np.hsplit(y,2) #跟np.split(y,2,axis=1)相同
a=np.arange(4)
b=a #把a的地址给b
c=a
d=b
a[0]=11 #修改某元素的数据【注意 数据的类型】
a[1:3]=[22,33] #修改第一项到第三项的数据。顾头不顾尾
e=b is a
b=a.copy() #把a的值给b
a[0]=100
print(a)
print(b) print(id(a),id(b))

排序:

 import numpy as np
z=np.array([[100,0,3],[10,20,30]])
c=np.sort(z,axis=1) #对各维分别进行排序-升序。[[ 0 3 100] [ 10 20 30]]
print(c)
c=np.sort(z,axis=0) #对各列分别进行排序-升序 [[ 10 0 3] [100 20 30]]
c=np.argsort(z,axis=1) #返回 各维按升序排序所处的位置。[[1 2 0] [0 1 2]]
c=np.argsort(z,axis=0) #返回 各列按升序排序所处的位置。[[1 0 0] [0 1 1]]
a=[1,5,1,4,3,4,4]
b=[9,4,0,4,0,2,1]
c=np.lexsort((b,a))

s=q[:-1]   去掉最后一个数据

q = np.arange(36)

s = q.reshape(6,6) #更改数组形状,变成6行6列

s = q.reshape(6,3,2) #更改数组形状
#总的分层6块,每块3行2列

s = q.reshape(-1,3,2)  #更改数组形状
# -1表示不知-自动处理,每块3行2列

arr2[::2,::2]   #设置步长为2

e=np.any(s) == True #s数据表中只要有一个数据是True就返回True
e=np.all(s) == True #s数据表中所有数据都是True就返回True

矩阵NumPy的更多相关文章

  1. numpy矩阵

    一.创建矩阵 Numpy提供了ndarray来进行矩阵的操作,在Numpy中 矩阵继承于NumPy中的二维数组对象,但矩阵区别于数组,不可共用数组的运算规律. 1.mat("第0行:第1行: ...

  2. Numpy 用法小结

    1.  asarray 函数 可以将输入数据转化为矩阵格式. 输入数据可以是(列表,元组,列表的列表,元组的元组,元组的列表等这些数组形式). >>> asarray([(1,2,3 ...

  3. numpy库:常用基本

    numpy 本文主要列出numpy模块常用方法 大部分内容来源于网络,而后经过自己的一点思考和总结,如果有侵权,请联系我 我是一名初学者,有哪些地方有错误请留言,我会及时更改的 创建矩阵(采用ndar ...

  4. numpy库常用基本操作

    NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推.在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量.比如说,二维数组相当于是一个一维数 ...

  5. Numpy 多维数组简介

     NumPy是一个功能强大的Python库,主要用于对多维数组执行计算.NumPy这个词来源于两个单词-- Numerical和Python.NumPy提供了大量的库函数和操作,可以帮助程序员轻松地 ...

  6. Numpy 基础学习

    numpy.array() 功能:创建一个数据 vector = numpy.array([1,2,3,4]) matrix = numpy.array([1,2,3,4],[11,12,13,14] ...

  7. Numpy初步

    1,获取矩阵行列数 Import numpyasnp #创建二维的naaray对象 a=np.array([[1,2,3,4,5],[6,7,8,9,10]]) print(a.shape)   #返 ...

  8. Python中的Numpy入门教程

    1.Numpy是什么 很简单,Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy.matplotlib一起使用.其实,list已经提供了类似于矩阵的表示形式,不过nu ...

  9. numpy 初识(一)

    基本操作: 读取文件(与pandas读取csv相似): import numpy numpy.genfromtxt("word.txt", delimiter=',', dtype ...

随机推荐

  1. 深度学习中 Batch Normalization

    深度学习中 Batch Normalization为什么效果好?(知乎) https://www.zhihu.com/question/38102762

  2. linux 内核参数优化----最大线程数限制及当前线程数查询

    1.总结系统限制有: /proc/sys/kernel/pid_max #查系统支持的最大线程数,一般会很大,相当于理论值 /proc/sys/kernel/thread-max max_user_p ...

  3. BZOJ1497[NOI2006]最大获利——最大权闭合子图

    题目描述 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU集团旗下的CS&T通讯公司在新一代通讯技术血战的前夜,需要做太多的准备工作,仅就站址选择一项,就需要完成 ...

  4. BZOJ4034[HAOI2015]树上操作——树链剖分+线段树

    题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的点权都 ...

  5. BZOJ4942 NOI2017整数(线段树)

    首先把每32位压成一个unsigned int(当然只要压起来能过就行).如果不考虑进/退位的话,每次只要将加/减上去的数拆成两部分直接单点修改就好了.那么考虑如何维护进/退位.可以发现进位的过程其实 ...

  6. Saddle Point ZOJ - 3955(求每个值得贡献)

    题意: 给出一个矩阵,删掉一些行和列之后 求剩下矩阵的鞍点的总个数 解析: 对于每个点 我们可以求出来 它所在的行和列  有多少比它大的 设为a 有多少比它小的 设为b 然后对于那些行和列 都有两种操 ...

  7. MT【33】证明琴生不等式

    解答:这里数学归纳法证明时指出关键的变形. 评:撇开琴生不等式自身的应用和意义外,单单就这个证明也是一道非常不错的练习数学归纳法的经典题目.

  8. POJ 1958 Strange Towers of Hanoi 解题报告

    Strange Towers of Hanoi 大体意思是要求\(n\)盘4的的hanoi tower问题. 总所周知,\(n\)盘3塔有递推公式\(d[i]=dp[i-1]*2+1\) 令\(f[i ...

  9. [POI2015]CZA

    [POI2015]CZA p很小,讨论 p=0... p=1... p=2:n-1放左或者放右两种情况,剩下怎么放是固定的,模拟然后判断即可 p=3: 正着做要状压,类似放书和排座位那些题,考虑以某个 ...

  10. layui 批量上传文件 + 后台 用servlet3.0接收【我】

    前台代码: [主要参照layui官方 文件上传示例 https://www.layui.com/demo/upload.html] <!DOCTYPE html> <html> ...