python数据结构:numpy

一、 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) #随机生成一个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  数组的维数  2 print(‘数组的大小‘,data.shape)   #描述数组各维度的大小      (3,4)print(‘数据类型‘,data.dtype)     #描述数组的数据类型     float

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

# 将list转换为二维数组
list = range(0,10)
data = np.array(list)   #实现将python列表的数据结构转换为np的array的数据结构
print(data)   #[0 1 2 3 4 5 6 7 8 9]
print(type(data))   #<class ‘numpy.ndarray‘>
print(data.ndim)   #1
print(data.shape)   #(10,)
print(data.dtype)   #int32

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

#将嵌套序列转换为ndarray
l1 = [range(10),range(10)]
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((3,4),dtype=float)   #生成一个3行4列的全0数组 ,其中的数据类型是int
print(‘zeros_arr‘,zeros_arr)

ones_arr = np.ones((3,4),dtype=float)    #生成一个3行4列的全1数组数据类型为float类型
print(‘ones_arr‘,ones_arr)

empty_arr = np.empty((3,4))
print(‘empty_arr‘,empty_arr)

empty_int_arr = np.empty((3,4),dtype=int)
print(‘empty_int_arr‘,empty_int_arr)

  (5)np.arange()

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

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

zero_float_arr = np.zeros((3,4),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([[1,2,3],[4,5,6]])  #生成一个列表,使用np.array方法将一个列表转换为np.array
print(arr)
print(type(arr))   #打印出数组的数据类型
print(arr.dtype)  #打印出数据类型

  (8)矩阵的运算

#产生一个2行3列的二维矩阵
arr = np.array([[1,2,3],[4,5,6]])
print(arr)
print(type(arr))
print(arr.dtype)

# 将矩阵进行相乘的运算,这个地方要注意,直接将矩阵进行乘法运算,是将矩阵中元素进行位置上的乘法运算
print(‘矩阵中的元素相乘arr*arr‘,arr*arr)

#将矩阵进行加法的运算
print(‘arr+arr‘,arr+arr)

# 实现矢量与标量的运算,矢量与标量运算的时候需要进行广播
print(‘1/arr=\n‘,1./arr)   #矩阵的除法
print(‘2*arr=\n‘,2*arr)

  (9)数组的切片操作

arr1 = np.arange(10)   #产生一个10个元素的数组
print(type(arr1))    #数据结构仍然是numpy.ndarray
print(arr1.dtype)   #元素的数据类型仍然是int32类型
print(arr1)     #
print(arr1[2:5])   #切片操作 ,左闭右开的切片
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)   # 创建一个3行3列的二维随机数组
print(‘data_arr \n‘,data_arr)

year_arr = np.array([[2000,2001,2000],[2005,2002,2009],[2001,2003,2010]])
print(‘year_arr \n‘,year_arr)

filtered_arr=data_arr[year_arr>2005]
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)  #生成一个2行3列的二维数组
print(‘arr1=\n‘,arr1)
print(‘arr1数组的转置为:\n‘,arr1.transpose())

  (12)三维矩阵及其转置

#3维矩阵
arr3d = np.random.rand(2,3,4)
print(‘arr3d=\n‘,arr3d)
print(‘================================‘)
print(arr3d.transpose((1,0,2)))

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

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

arr = np.random.randn(2,3)   #生成量行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(3,4)
print(arr1)
print(np.where(arr1>0.5,1,-1))

   14.数组求和

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

   15.

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

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

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

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

    16unique操作

arr1 = np.array([[1,2,1],[2,3,4]])
print(‘arr1‘,arr1)
print(‘np.unique(arr1)‘,np.unique(arr1))

原文地址:https://www.cnblogs.com/bigdata-stone/p/10202363.html

时间: 2024-11-09 03:11:21

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

[转]python与numpy基础

来源于:https://github.com/HanXiaoyang/python-and-numpy-tutorial/blob/master/python-numpy-tutorial.ipynb python与numpy基础 寒小阳(2016年6月) Python介绍 如果你问我没有编程基础,想学习一门语言,我一定会首推给你Python类似伪代码的书写方式,让你能够集中精力去解决问题,而不是花费大量的时间在开发和debug上同时得益于Numpy/Scipy这样的科学计算库,使得其有非常高效

Python学习教程(Python学习路线+Python学习视频):Python数据结构

Python学习教程(Python学习路线+Python学习视频):Python数据结构   数据结构引言:   数据结构是组织数据的方式,以便能够更好的存储和获取数据.数据结构定义数据之间的关系和对这些数据的操作方式.数据结构屏蔽了数据存储和操作的细节,让程序员能更好的处理业务逻辑,同时拥有快速的数据存储和获取方式. 在这篇文章中,你将了解到多种数据结构以及这些数据结构在Python中实现的方式.    抽象数据类型和数据结构 数据结构是抽象数据类型(ADT)的实现,通常,是通过编程语言提供的

Python数据结构

1. 元组(tuple) 元组由不同的元素组成,每个元素可以储存不同类型的数据,如字符串.数字甚至元组.元组是写保护的,即元组创建后不能再做任何修改操作. 1.1 元组的创建 Tuple(元组)由一系列元素组成,所有元素被包含在一对圆括号中.创建元组时可以不指定元素个数,但一旦创建后就不能修改长度 元组的创建格式如下:tuple_name = (元素1,元素2,-) 如果创建空元组,只需要一对空的圆括号:tuple_name = () 如果创建的元组只包含一个元素,应在元素后面加上逗号,以区分元

Windows系统下Python与NumPy安装方法

Windows系统下Python与NumPy安装方法 Windows下Python的某些第三方包安装步骤实在是太麻烦了(这里主要以NumPy为例,目前只有遇到安装它的时候出现了很多问题),晚上花了好几个小时才把NumPy科学计算包安装好,在这里描述下安装过程,避免大家走没有必要的弯路. 1,安装Python 首先,运行下载的MSI安装包,选择安装组件时,确保勾上了所有的组件. 特别要注意选上pip和Add python.exe to Path,然后多次点击Next即可完成安装. Python解释

Python数据结构——散列表

散列表的实现常常叫做散列(hashing).散列仅支持INSERT,SEARCH和DELETE操作,都是在常数平均时间执行的.需要元素间任何排序信息的操作将不会得到有效的支持. 散列表是普通数组概念的推广.如果空间允许,可以提供一个数组,为每个可能的关键字保留一个位置,就可以运用直接寻址技术. 当实际存储的关键字比可能的关键字总数较小时,采用散列表就比较直接寻址更为有效.在散列表中,不是直接把关键字用作数组下标,而是根据关键字计算出下标,这种 关键字与下标之间的映射就叫做散列函数. 1.散列函数

windows下python配置numpy、matplotlib、scipy

这两天对Python进行了研究,并且配置了numpy.matplotlib以及scipy.现对基本概念以及配置步骤介绍: 基本概念: Python (英语发音:/?pa?θ?n/), 是一种面向对象.解释型计算机程序设计语言.专用的科学计算扩展库很多,例如如下3个十分经典的科学计算扩展库:NumPy.SciPy和matplotlib,它们分别为Python提供了快速数组处理.数值运算以及绘图功能. <python科学计算>这本书中对Python介绍得很是详细,推荐下.电子版下载链接http:/

python数据结构与算法 38 分析树

分析树 树的结构完成以后,该是时候看看它能做点什么实事儿了.这一节里,我们研究一下分析树.分析树能够用于真实世界的结构表示,象语法或数学表达式一类的. 图1 一个简单语句的分析树 图1所示是一个简单语句的层级结构,把语句表示为树结构可以让我们用子树来分析句子的组成部分. 图2 ((7+3)?(5?2))的分析树 我们也可以把数学表达式如((7+3)?(5?2))表示为分析树,如图2.此前我们研究过完全括号表达式,这个表达式表达了什么呢?我们知道乘法的优先级比加减要高,但因为括号的关系,在做乘法之

python和numpy的版本、安装位置

命令行下查看python和numpy的版本和安装位置 1.查看python版本 方法一: python -V 注意:‘-V‘中‘V’为大写字母,只有一个‘-’ 方法二: python --version 注意:‘--version'中有两个‘-’ 2.查看python安装位置 方法一: python -c "import sys; print sys.executable" 方法二: python -c "import os; print os.sys.executable&

python数据结构与算法 36 树的基本概念

树 学习目标 理解什么是树及使用方法 学会使用树实现映射 用列表实现树 用类和引用实现树 用递归实现树 用堆实现优先队列 树的例子 前面我们学习过栈和队列这类线性数据结构,并且体验过递归,现在我们学习另一种通用数据结构,叫做树.树在计算机科学中应用广泛,象操作系统.图形学.数据库系统.网络等都要用到树.树和他们在自然界中的表哥--植物树--非常相似,树也有根,有分枝,有叶子.不同之处是,数据结构的树,根在顶上,而叶子在底部. 在开始学习之前,我们来研究几个普通的例子.第一个是生物学上的分级树.图

Python学习日志之Python数据结构初识

Python数据结构初识: 一.Python数据结构概述 1.何为数据结构 在程序中,同样的一个或几个数据组织起来,可以有不同的组织方式,也就是不同的存储方式,不同的组织方式就是不同的结构,我们把这些数据组织在一起的结构就叫做数据结构 例如: 有一串字符串:"abc",我们将它重新组织一下,比如通过list()函数将"abc"变成["a","b","c"],那么这个时候数据发生了重组,重组之后的结构就发生了