Python模块(2)-Numpy 简易使用教程

Numpy模块 简易使用教程

  • 1.数组创建
  • 2.数组基本属性-维度、尺寸、数据类型
  • 3.数组访问-索引、切片、迭代
  • 4.数组的算术运算-加减乘除、转置求逆、极大极小
  • 5.通用函数-sin,cos,exp,sqrt
    • np.dot与np.matmul的区别
  • 6.数组的合并和分割
    • 6.1 np.vstack(),np.hstack()
    • 6.2 np.stack()
  • 7.list与数组相互转换
    • 7.1 list() vs tolist()
  • 8.np.random
    • 8.1 randn()和rand()
    • 8.2np.random.choice()
    • 8.3 np.random.uniform()
  • 9.常用方法
    • x.astype(int)
    • np.squeeze()
    • np.std()
    • np.prob()
    • array.copy()
    • np.linspace()
    • np.vstack()
    • np.c_ ()
    • arr.ravel()

Numpy 是pythond科学计算的基础模块,常被用作多维数据容器,能够完成基本的科学计算操作

1.数组创建

import numpy as np# 1.创建数组
arr1 = np.array([1, 2, 3])
arr2 = np.array([(1.3, 9, 2.0), (7, 6, 1)])
arr3 = np.zeros((2, 3))
arr4 = np.identity(3) # 三维度单位阵
arr5 = np.random.random(size=(2, 3))

2.数组基本属性-维度、尺寸、数据类型

# 2.数组属性
print(arr2.shape)   # 矩阵的形状 (2, 3)
print(arr2.ndim)    # 矩阵的秩 2
print(arr2.size)    # 矩阵所有元素个数 6
print(arr2.dtype.name) # 矩阵中元素的类型 float64

3.数组访问-索引、切片、迭代

# 3.数组访问
print(arr2[:1,:1])   # [[1.3]] 
for row in arr2:print(row)
for element in arr2.flat:print(element)

4.数组的算术运算-加减乘除、转置求逆、极大极小

# 4.数组运算
arr9 = np.array([[2, 1], [1, 2]])
arr10 = np.array([[1, 2], [3, 4]])
# 逐元素的+,-,*,/,%,操作
print(arr9 - arr10)
print(arr9**2)
print(arr9 * 3)
print(arr9 * arr10)         # 等价于 np.multiply(arr9, arr10)
print(np.dot(arr9, arr10))  # 矩阵叉积, 在二维度的情况下和矩阵乘积的结果一致
print(np.matmul(arr9, arr10))  # 矩阵乘积
# 矩阵转置,求逆,求和,求极大,求极小
print(arr9.T)
print(np.linalg.inv(arr9))
print(arr9.sum(), arr9.max(), arr9.min())  # 6 2 1

5.通用函数-sin,cos,exp,sqrt

# 5.通用函数sin,cos,都是针对整个数组逐元素操作
print(np.exp(arr9))
print(np.sin(arr9))
print(np.sqrt(arr9))

np.dot与np.matmul的区别

在二维度的情况下和矩阵乘积的结果一致

print(np.dot(arr9, arr10))  # 矩阵叉积, 
print(np.matmul(arr9, arr10))  # 矩阵乘积

参考博文:https://blog.csdn.net/acterminate/article/details/96151132

6.数组的合并和分割

# 6.数组的合并和分割
arr11 = np.vstack((arr9, arr10))  # 纵向合并,沿着第0维度合并
arr12 = np.hstack((arr9, arr10))  # 横向合并,沿着第1维度合并
print(np.vsplit(arr12, 2))        # 纵向切割
print(np.hsplit(arr12, 2))        # 横向切割

6.1 np.vstack(),np.hstack()

np.vstack()沿着第0维度堆叠
np.hstack()沿着第1维度堆叠

只有两个维度:
np.vstack(tuple)垂直方向堆叠成numpy.array
np.hstack(tuple)水平方向堆叠成numpy.array

注意:
tuple=(a1,a2,a3,…an)
a1,a2,a3,…an除了堆叠的那个维度,剩余的维度尺寸要求完全一致.

>>> a1=numpy.random.randn(2,2)
>>> a2=numpy.random.randn(3,2)
>>> a=numpy.vstack((a1,a2))
>>> a
array([[ 0.67667278, -0.3318424 ],[-0.2550355 , -0.74132559],[ 0.43534239,  1.46399303],[-0.86049107,  2.03871322],[-0.01824614,  0.46310639]])>>> b1=numpy.random.randn(2,3)
>>> b2=numpy.random.randn(2,1)
>>> b=numpy.hstack((b1,b2))
>>> b
array([[-0.69216195,  0.43455353, -0.5628851 ,  1.98854944],[ 1.73648473,  1.11249471, -0.8067703 , -0.53433626]])
>>> import numpy
>>> a1=numpy.random.randn(2,2,2)
>>> a2=numpy.random.randn(2,2,2)
>>> a=numpy.vstack((a1,a2))
>>> a[0]
array([[ 0.06585097, -0.80433501],[ 1.77412345, -0.5875084 ]])
>>> b=numpy.hstack((a1,a2))
>>> b.shape
(2, 4, 2)
>>> a.shape
(4, 2, 2)

参考博文:https://blog.csdn.net/nanhuaibeian/article/details/100597342

6.2 np.stack()

stack() 函数是vstack(),与hstack()结合升级.

Parameters: 
arrays : sequence of array_like
Each array must have the same shape.
axis : int, optional
The axis in the result array along which the input arrays are stacked.
out : ndarray, optional
If provided, the destination to place the result. The shape must be correct, matching that of what stack would have returned if no out argument were specified.
Returns:    
stacked : ndarray
The stacked array has one more dimension than the input arrays.

np.stack(tuple, axis=0) 等价于 np.vstack(tuple)
np.stack(tuple, axis=1) 等价于 np.hstack(tuple)

参考博文:https://blog.csdn.net/u013019431/article/details/79768219

7.list与数组相互转换

list–>np.array

a=[1,2,3]
b=np.array(a)

np.array->list

c=b.tolist()

7.1 list() vs tolist()

  1. 直接用list()函数 # 转换成 第0维的每一个元素(Numpy.array) 组成的list
  2. 用array.tolist()函数 # 与原来的array的数据形式是一样的,只不过每一维度都是一个list

结论–tolist() 方法转换的更彻底,list()方法只转换了源数据的第一个维度。
如果np.array是一维,两者没有区别。但如果是二维结果是不同的。

>>> import numpy >>> a1=numpy.random.rand(3)
>>>>> a1
array([0.26546725, 0.27424911, 0.18618962])
>>> list(a1)
[0.26546725247934855, 0.27424910895802035, 0.18618962270208705]
>>> a1.tolist()
[0.26546725247934855, 0.27424910895802035, 0.18618962270208705]>>> a2
array([[0.25176667, 0.78656379, 0.17814966],[0.38749959, 0.195838  , 0.91929009]])
>>> list(a2)
[array([0.25176667, 0.78656379, 0.17814966]), array([0.38749959, 0.195838  , 0.91929009])]
>>> a2.tolist()
[[0.25176666870818276, 0.7865637882478266, 0.17814966253473885], [0.3874995863899837, 0.19583799515418743, 0.9192900894591074]]>>> 

参考博文:https://www.cnblogs.com/wxiaoli/p/9550382.html

8.np.random

于随机/随机数相关的一个模块。

8.1 randn()和rand()

rand()-从标准正态分布中随机抽样
randn()-从标准正态分布中随机抽样,值处于[0,1]之间

>import numpy
>a=numpy.random.randn(2)
>a
array([2.14862612, 2.64967285])
>b=numpy.random.randn(2,4)
>b
array([[ 1.12026781, -0.35804222,  0.40199839,  0.8530957 ],[ 0.17434359,  0.77714432, -1.050777  , -1.4872941 ]])
>c=numpy.random.randn(2,4,3)
>c
array([[[-0.63199863,  0.3026388 ,  1.52031827],[-0.02198394,  1.21513216, -0.0347614 ],[ 0.05571264,  0.38651474, -1.24363781],[-1.93182679,  1.1883758 , -1.90170175]],[[-0.65822958,  0.52109845, -0.49748048],[ 0.66535972, -0.118965  ,  1.55862421],[ 0.58604542,  0.44303396, -1.27043267],[-0.26475081,  0.91481557, -0.7255539 ]]])
>a1=numpy.random.rand(2)
>a1
array([0.29220946, 0.56908742])

8.2np.random.choice()

从xxx中随机抽取元素

numpy.random.choice(a, size=None, replace=True, p=None)

a : 一维数组或整数
size : 生成样本的大小
replace : bool类型 False表示样本中不允许有重复值 True…
p : 给定数组中元素出现的概率

np.random.choice(5,3,p=[0,0,0,0,1])       
array([4, 4, 4], dtype=int64)    

参考文档:https://www.cnblogs.com/cavaliers20160620/p/8964784.html

8.3 np.random.uniform()

从[1,2]的均匀分布中随机采样64个数据,并且将尺寸由 (64,)转换成(64,1)

np.random.uniform(1, 2, size=64)[:, np.newaxis]

9.常用方法

x.astype(int)

改变数组中的数据类型

x=np.array([1,2,2.5])
x.astype(int)

np.squeeze()

去除中维度为1 的维

In [20]: d=np.array([[[1],[1]],[[1],[1]]])
In [22]: d.shape
Out[22]: (2, 2, 1)

In [23]: e=np.squeeze(d)
In [25]: e.shape
Out[25]: (2, 2)

np.std()

计算所有元素的标准差

numpy.std(data)

计算每一列的标准差

numpy.std(data, 0)

计算每一行的标准差

numpy.std(data, 1)

np.prob()

返回给定维度上各个元素的乘积

>>> import numpy as np
>>> a=np.array([[2,3],[4,5]])
>>> a
array([[2, 3],[4, 5]])>>> np.prod(a)
120
>>> np.prod(a,axis=0)
array([ 8, 15])>>> np.prod(a,axis=1)
array([ 6, 20])

array.copy()

直接名字赋值,两个变量指向同一块地址,其中任何一个数据操作都会影响另一个数组。用数组的.copy()方法,则会建立一个与原来完全独立但是数字完全相同的一个数组。

import numpy as np
ar1 = np.arange(10)
print(ar1)ar2 = ar1
print(ar2 is ar1)ar1[2] = 9
print(ar1,ar2)
#ar1和ar2 指向同一个值,所以ar1改变,ar2一起改变print('-------------------------------')ar3 = ar1.copy()
print(ar3 is ar1)
ar1[0] = 9
print(ar1,ar3)
#coyp方法生成数组及其数据的完整拷贝j

输出结果:

    [0 1 2 3 4 5 6 7 8 9]True[0 1 9 3 4 5 6 7 8 9] [0 1 9 3 4 5 6 7 8 9]-------------------------------False[9 1 9 3 4 5 6 7 8 9] [0 1 9 3 4 5 6 7 8 9]

参考博文:https://blog.csdn.net/weixin_30935137/article/details/80822005

np.linspace()

输出(-1,1)之间的等间距15个数

np.linspace(-1, 1, 15)

np.vstack()

写在一行的for循环,每次将15个数作为一行堆叠64次,生成一个64*15的矩阵

np.vstack([np.linspace(-1, 1, 15) for _ in range(64)])

np.c_ ()

np.c_ 用于连接两个矩阵
np.c 中的c 是 column(列)的缩写,就是按列叠加两个矩阵,就是把两个矩阵左右组合,要求行数相等。
参考博文:https://blog.csdn.net/qq_33728095/article/details/102512600

arr.ravel()

将多维数组转换成一维数组

>>> a = numpy.array([[1,2],[3,4]])
>>> a.ravel()
array([1, 2, 3, 4])
>>>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445206.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习问题总结(01)

文章目录1.请描述推荐系统中协同过滤算法CF的原理2.请描述决策树的原理、过程、终止条件,以及如何防止过拟合2.1决策树生成算法2.2 剪枝处理(防止过拟合)2.3 停止条件2.4 棵决策树的生成过程2.5 决策树的损失函数3.请描述K-means的原理&#…

pthread_attr_init线程属性

1.线程属性 线程具有属性,用pthread_attr_t表示,在对该结构进行处理之前必须进行初始化,在使用后需要对其去除初始化。我们用pthread_attr_init函数对其初始化,用pthread_attr_destroy对其去除初始化。 1. …

Python实例讲解 -- 解析xml

Xml代码 <?xml version"1.0" encoding"utf-8"?> <info> <intro>信息</intro> <list id001> <head>auto_userone</head> <name>Jordy</name> <number&g…

springboot3——Email

maven导入包&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId><version>2.1.6.RELEASE</version></dependency> 参数配置&#xff1a; # MailPrope…

python(22)--面向对象1-封装

python面向对象1面向过程/面向对象2面向对象核心概念-类3类的设计3.1类三要素-类名、属性、方法3.2面向对象基础语法3.2.1查看对象的常用方法3.2.2类定义3.2.3创建类对象3.2.4__init__()方法3.2.5 self参数3.2.6类内置方法和属性_del_()方法--销毁对象_str_()方法--定制化输出对…

机器学习问题总结(02)

文章目录1.stacking模型以及做模型融合的知识1.1 从提交结果中融合1.2 stacking1.3 blending2. 怎样去优化SVM算法模型的&#xff1f;2.1 SMO优化算法2.2 libsvm 和 Liblinear3.现有底层是tensorflow的keras框架&#xff0c;如果现在有一个tensorflow训练好的模型&#xff0c;k…

python对操作系统的目录和文件操作

一、获取当前目录下的特定文件列表>>>import glob,os>>>curdir os.getcwd() #获取当前目录>>>os.chdir(workdir) #设置当前目录>>>dir glob.glob(*.dat) #获取当前目录的dat文件列表>>>os.chdir(curdir) #…

常见漏洞

Cookie without HttpOnly flag set 如果在Cookie上设置了HttpOnly属性&#xff0c;则客户端JavaScript无法读取或设置Cookie的值。 这种措施通过阻止某些客户端攻击&#xff08;例如跨站点脚本&#xff09;&#xff0c;通过阻止它们通过注入的脚本来简单地捕获cookie的值&…

python函数星号参数

2011-09-01 17:35 2人阅读 评论(0) 收藏 编辑 删除 今天有个工作是导出一个函数给脚本用 我自已先要测一下 先要客户端发送一个消息给服务器 看了下C部分的代码,如下 "def onNetMessage(self,playerID, msgName,msgParam):\n" //客户端调用服务器脚本 " …

MachineLearning(3)-流型

流型-manifold在很多机器学习的文章中会见到“嵌入在高维空间的低维流型”这样的字眼&#xff0c;下记录一些重要概念。参考资料&#xff1a;https://blog.csdn.net/sinat_32043495/article/details/789977581.流型 局部具有欧几里得空间性质的空间&#xff08;流型就是一个空间…

C/C++常见面试题(四)

C/C面试题集合四 目录 1、什么是C中的类&#xff1f;如何定义和实例化一个类&#xff1f; 2、请解释C中的继承和多态性。 3、什么是虚函数&#xff1f;为什么在基类中使用虚函数&#xff1f; 4、解释封装、继承和多态的概念&#xff0c;并提供相应的代码示例 5、如何处理内…

机器学习问题总结(03)

文章目录1.struct和class区别&#xff0c;你更倾向用哪个2.kNN&#xff0c;朴素贝叶斯&#xff0c;SVM的优缺点&#xff0c;各种算法优缺点2.1 KNN算法2.2 朴素贝叶斯2.3SVM算法2.4 ANN算法2.5 DT算法3. 10亿个整数&#xff0c;1G内存&#xff0c;O(n)算法&#xff0c;统计只出…

python源代码现成重用大全

Nullege is a search engine for Python source code. http://nullege.com/

redis——新版复制

sync虽然解决了数据同步问题&#xff0c;但是在数据量比较大情况下&#xff0c;从库断线从来依然采用全量复制机制&#xff0c;无论是从数据恢复、宽带占用来说&#xff0c;sync所带来的问题还是很多的。于是redis从2.8开始&#xff0c;引入新的命令psync。 psync有两种模式&a…

Python(23)-面向对象2-继承,多态

面向对象基本概念2--继承、多态1.继承基本概念2.子类重写父类方法2.1完全重写2.2扩展父类方法--super()3.多继承4.新式类和旧式类5.多态基本概念6.类属性、类方法-classmethod6.1类属性6.2类方法classmethod7.静态方法staticmethod8.案例分析本系列博文来自学习《Python基础视频…

Linux Linux 集群

Linux 集群 Page navigation 什么是集群?集群分类基于 Linux 的集群Linux 服务器集群系统Linux 高性能计算集群集群系统 MOSIX构建 Linux 集群IBM 与 Linux 集群 本专题收集了 Linux 集群相关的文章和教程。 什么是集群? 简单的说&#xff0c;集群&#xff08;cluster&#x…

机器学习问题总结(04)

文章目录1、MLP的BP过程2、maxpool层BP怎么做的2.1 **mean pooling**2.2 max pooling3、opencv遍历像素的方式&#xff0c;讲两种&#xff1f;4、传统图像处理有了解过吗&#xff0c;比如去噪 特征提取5、问在linux下写过代码吗&#xff1f; 问用了什么软件工具6、LDA&#xff…

持续更新的Zookeeper知识总结

简介 Zookeeper为分布式应用 提供了高效且可靠的分布式协调服务&#xff0c;提供了诸如统一命名服务、发布订阅、负载均衡、配置管理和分布式锁等分布式的基础服务。 设计目标是将那些复杂且容易出错的分布式一致性服务封装起来&#xff0c;构成一个高效可靠的原语集&#xf…

Python(24)-面向对象3-可迭代类对象Pokemon

面向对象3-Pokemon demo1.可迭代类对象1.可迭代类对象 想要实现类对象中某些属性/数值的迭代访问&#xff0c;需要在类中定义一个__iter__()方法&#xff0c;和__next__() 的方法(python 2 中为next()方法)。 _iter_()返回值是self&#xff0c; _next_()中遍历完所有的元素后发…

机器学习问题总结(05)

文章目录1. Hadoop、Spark1.1 hadoop1.2 spark1.3 MapReduce1.3.1 概念1.3.1 MapReduce执行流程2、机器学习场景3、推荐系统&#xff08;预测电影等级&#xff09;4、CTR&#xff08;点击通过率 -> 广告&#xff09;5、SVM5.1 svm的原理5.2 SVM的核技巧6、K-means6.1 K-mean…