一、 numpy概述

numpy(Numerical Python)提供了python对多维数组对象ndarray(应该是N-dimension array)的支持,具有矢量运算能力,快速、节省空间。numpy支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

二、实操

1. 创建ndarray数组

ndarray:N维数组对象(矩阵),所有元素必须是相同类型。
ndarray属性:ndim属性,表示维度个数;shape属性,表示各维度大小;dtype属性,表示数据类型。

2.生成指定维度的随机数组

  (1)生成一个3行4列的随机数组,然后计算数组的各个属性

# 生成指定维度的随机数组
data = np.random.rand(,) #随机生成一个3行4列的随机数组
print(data)
print(type(data)) #数据结构是:<class 'numpy.ndarray'>

  [[0.9866426 0.54835475 0.69859764 0.32483656]
  [0.27492952 0.23119927 0.97028605 0.08145471]
  [0.28869387 0.2712937 0.91773528 0.95094582]]

# 打印出数组的各个属性
print('数组的维数',data.ndim) #number of dimension 数组的维数
print('数组的大小',data.shape) #描述数组各维度的大小 (3,4)
print('数据类型',data.dtype) #描述数组的数据类型 float

  (2)将列表转换为np.array形式

# 将list转换为二维数组
list = range(,)
data = np.array(list) #实现将python列表的数据结构转换为np的array的数据结构
print(data) #[ ]
print(type(data)) #<class 'numpy.ndarray'>
print(data.ndim) #
print(data.shape) #(,)
print(data.dtype) #int32

  (3)将嵌套序列转换为ndarray的形式

#将嵌套序列转换为ndarray
l1 = [range(),range()]
data = np.array(l1)
print('数据类型',type(data))
print('数据的维度的大小为:',data.shape)
print('数组的维数为:',data.ndim)

  (4)np.zeros(shape, dtype=float, order='C')   #注意这里shape是一个元组,对于其他的几个数据结构同理

#np.zeros np.ones 和np.empty
#np.zeros
zeros_arr = np.zeros((,),dtype=float) #生成一个3行4列的全0数组 ,其中的数据类型是int
print('zeros_arr',zeros_arr) ones_arr = np.ones((,),dtype=float) #生成一个3行4列的全1数组数据类型为float类型
print('ones_arr',ones_arr) empty_arr = np.empty((,))
print('empty_arr',empty_arr) empty_int_arr = np.empty((,),dtype=int)
print('empty_int_arr',empty_int_arr)

  (5)np.arange()

print(np.arange())   #生成0到9的数组
print(type(np.arange())) #数据类型是numpy.ndarray的数据类型

  (6)生成一个全0的矩阵

zero_float_arr = np.zeros((,),dtype=np.float)
print(zero_float_arr)
print(type(zero_float_arr)) #数组的数据类型是numpy.ndarray
print(zero_float_arr.dtype) #
# 使用astype做数据类型的转换
zero_int_arr = zero_float_arr.astype(np.int)
print(type(zero_int_arr))
print(zero_int_arr.dtype)

  (7)矢量的计算

arr = np.array([[,,],[,,]])  #生成一个列表,使用np.array方法将一个列表转换为np.array
print(arr)
print(type(arr)) #打印出数组的数据类型
print(arr.dtype)  #打印出数据类型

  (8)矩阵的运算

#产生一个2行3列的二维矩阵
arr = np.array([[,,],[,,]])
print(arr)
print(type(arr))
print(arr.dtype) # 将矩阵进行相乘的运算,这个地方要注意,直接将矩阵进行乘法运算,是将矩阵中元素进行位置上的乘法运算
print('矩阵中的元素相乘arr*arr',arr*arr) #将矩阵进行加法的运算
print('arr+arr',arr+arr) # 实现矢量与标量的运算,矢量与标量运算的时候需要进行广播
print('1/arr=\n',./arr) #矩阵的除法
print('2*arr=\n',*arr)

  (9)数组的切片操作

arr1 = np.arange()   #产生一个10个元素的数组
print(type(arr1)) #数据结构仍然是numpy.ndarray
print(arr1.dtype) #元素的数据类型仍然是int32类型
print(arr1) #
print(arr1[:]) #切片操作 ,左闭右开的切片
arr2 = np.arange(12).reshape(3,4)   #产生一个3行4列的二维数组
print(arr2)
print(arr2[1]) #切片操作,切出数组中第一行的数据,出数组的第一行
print(arr2[0:2,1:]) #切片操作,切除第0行第一行以及第一列之后的数组
print(arr2[:,1:3]) #切片操作,切出所有的行,以及第1列,第2列的数据

  (10)条件索引

#找出data_arr中2015年以后的数据
data_arr = np.random.rand(,) # 创建一个3行3列的二维随机数组
print('data_arr \n',data_arr) year_arr = np.array([[,,],[,,],[,,]])
print('year_arr \n',year_arr) filtered_arr=data_arr[year_arr>]
print('filtered_arr \n',filtered_arr) #多条件索引
#多个条件索引
filtered_arr = data_arr[(year_arr<=2005) & (year_arr%2==0)] #打印出年份小于2005年并且为偶数年份的数据
# print(year_arr[(year_arr<=2005) & (year_arr%2==0)])
print('filtered_arr',filtered_arr)

  (11)二维矩阵的转置

arr1 = np.random.rand(,)  #生成一个2行3列的二维数组
print('arr1=\n',arr1)
print('arr1数组的转置为:\n',arr1.transpose())

  (12)三维矩阵及其转置

#3维矩阵
arr3d = np.random.rand(,,)
print('arr3d=\n',arr3d)
print('================================')
print(arr3d.transpose((,,)))

  (13)常见运算(np.around、np.floor、np.ceil、np.where)

    ①p.ceil 函数返回输入值的上限,就是向上取整,即对于输入 x ,返回最小的整数 i ,使得 i> = x。

arr = np.random.randn(,)   #生成量行3列的随机数组
print(arr)

    ②np.floor 返回不大于输入参数的最大整数。 即对于输入值 x ,将返回最大的整数 i ,使得 i <= x。 注意在Python中,向下取整总是从 0 舍入。

print('np.floor(arr)=\n',np.floor(arr))

    ③np.rint()是根据四舍五入取整

print('np.rint(arr)=\n',np.rint(arr))

    ④np.isnan(arr)是判断数组的每个元素是不是NaN数据类型

print('np.isnan(arr)=\n',np.isnan(arr))

    ⑤np.where(condition, x, y),满足条件(condition),输出x,不满足输出y。

#np.where
arr1 = np.random.rand(,)
print(arr1)
print(np.where(arr1>0.5,,-))

   14.数组求和

arr1 = np.random.rand(,)
print('arr1=\n',arr1)
print('np.sum(arr1)=\n',np.sum(arr1)) #对数组进行求和
print('np.sum(arr1),axis=0',np.sum(arr1,axis=)) #在列的方向进行求和
print('np.sum(arr1),axis=1',np.sum(arr1,axis=)) #在行的方向进行求和

   15.

    np.array.any()是或操作,将np.array中所有元素进行或操作,然后返回True或False

    np.array.all()是与操作,将np.array中所有元素进行与操作,然后返回True或False

arr1 = np.random.randn(,)
print(arr1)
print(np.any(arr1>))
print(np.all(arr1>))

[[-0.03475223 0.21371993 0.84167799]
[ 1.60330052 0.02812848 1.37971765]]
True
False

    16unique操作

arr1 = np.array([[,,],[,,]])
print('arr1',arr1)
print('np.unique(arr1)',np.unique(arr1))

python数据结构:numpy的更多相关文章

  1. python数据结构-数组/列表/栈/队列及实现

    首先 我们要分清楚一些概念和他们之间的关系 数组(array)  表(list)  链表(linked list)  数组链表(array list)   队列(queue)  栈(stack) li ...

  2. [转]python与numpy基础

    来源于:https://github.com/HanXiaoyang/python-and-numpy-tutorial/blob/master/python-numpy-tutorial.ipynb ...

  3. Python数据分析——numpy基础简介

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:基因学苑 NumPy(Numerical Python的简称)是高性 ...

  4. [python] 安装numpy+scipy+matlotlib+scikit-learn及问题解决

    这篇文章主要讲述Python如何安装Numpy.Scipy.Matlotlib.Scikit-learn等库的过程及遇到的问题解决方法.最近安装这个真是一把泪啊,各种不兼容问题和报错,希望文章对你有所 ...

  5. python安装numpy和pandas

    最近要对一系列数据做同比比较,需要用到numpy和pandas来计算,不过使用python安装numpy和pandas因为linux环境没有外网遇到了很多问题就记下来了.首要条件,python版本必须 ...

  6. python数据结构与算法

    最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...

  7. python和numpy的版本、安装位置

    命令行下查看python和numpy的版本和安装位置 1.查看python版本 方法一: python -V 注意:‘-V‘中‘V’为大写字母,只有一个‘-’ 方法二: python --versio ...

  8. python数据结构与算法——链表

    具体的数据结构可以参考下面的这两篇博客: python 数据结构之单链表的实现: http://www.cnblogs.com/yupeng/p/3413763.html python 数据结构之双向 ...

  9. python数据结构之图的实现

    python数据结构之图的实现,官方有一篇文章介绍,http://www.python.org/doc/essays/graphs.html 下面简要的介绍下: 比如有这么一张图: A -> B ...

  10. Python数据结构与算法--List和Dictionaries

    Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...

随机推荐

  1. linux运维、架构之路-Kubernetes集群部署TLS双向认证

    一.kubernetes的认证授权       Kubernetes集群的所有操作基本上都是通过kube-apiserver这个组件进行的,它提供HTTP RESTful形式的API供集群内外客户端调 ...

  2. Java数据结构与算法(3):队列

    队列也是一种表,不同的是队列在一端进行插入而在另一端进行删除. 队列模型 队列的基本操作包括入队.出队操作.在表的末端插入元素,在表的开头删除元素,即先进先出(FIFO). 队列的数组实现 对于每一个 ...

  3. 原生js实现简单的放大镜效果

    前言:相信很多同学在浏览购物网站的时候都会用到过放大镜的功能,这个功能在日常的网站也会经常用到.接下来我们开始实现一下它吧: (1)首先了解一下放大镜效果的html架构:如下图,它由两部分组成. ht ...

  4. C++新旧类型转换小记

    旧式类型转换可应对一切转换,不管合不合理,有没有风险,你让我转我就转给你,后果自负. 新式类型转换比较安全,主要体现在父子类之间的运行时转换 dynamic_cast上,若转换失败则返回空指针,而旧式 ...

  5. p2p传输协议

    老司机是如何飙车的——P2P传输协议 转载来自2017-03-27 15:23 点波蓝字关注变智者 秋明山上人行稀,常有车手较高低,如今车道依旧在,不见当年老司机.其实老司机们从未离去,只不过好的车手 ...

  6. vundle的安装笔记-20160721

    vundle是一个vim管理插件, 而bundle是命令, 用来操作vundle的. bundle 英[ˈbʌndəl] 美[ˈbʌndəl] n. 捆,束,包:大量:一大笔钱:极度 v. 归拢:捆: ...

  7. 2013 AAAI: Uncorrelated Lasso

    Si-Bao Chen, Chris Ding, Bin Luo and Ying Xie. Uncorrelated Lasso. AAAI, 2013. 第一作者是安徽大学陈思宝副教授. 第二作者 ...

  8. Retina 屏幕与二倍图

    分辨率 屏幕分辨率:指屏幕可显示的像素的个数 图像分辨率:位图图像包含的像素的个数 对于 Retina 屏它的分辨率是传统屏的两倍,而屏幕大小没有变化,所以它需要的图片的分辨率应该是传统屏幕的两倍(甚 ...

  9. charles之抓取浏览器https请求

    用charles抓取浏览器https的包时,请求显示为unknown,且请求和响应数据乱码,本篇介绍如何抓取正常响应的https请求 目录 1.安装charles 2.安装证书.添加域名 3.抓包 1 ...

  10. UI自动化之三种等待

    UI自动化中常用三种等待 目录 1.强制等待 2.隐式等待 3.显示等待 1.强制等待 执行到某一条语句后,然后sleep(3),等待3秒后,才会继续执行后面的语句 2.隐式等待 隐式等待只需要声明一 ...