数组函数

通用元素级数组函数通用函数(即ufunc)是一种对ndarray中的数据执行元素级的运算。我们可以将其看做是简单的函数(接收一个或多个参数,返回一个或者多个返回值).

常用一元ufunc:

函数 说明
abs 计算整数、浮点数的绝对值。
aqrt 计算各元素的平方根。相当于arr ** 0.5
square 计算各元素的平方。相当于arr ** 2
sign 计算各元素的正负号,1(正数)、0(零)、-1(负数)
ceil 计算各元素的celling值,即大于该值的最小整数。
floor 计算各元素的floor值,即小于等于该值的最大整数。
rint 将各元素值四舍五入到最近的整数,保留dtype
modf 将数组的小数和整数部分以两个独立数组的形式返回
isnan 返回一个表示“那些是NaN(这不是一个数字)”的布尔类型数组.

常用二元ufunc

函数 说明
add 将数组中对应的元素相加.
subtract 从第一个数组中减去第二个数组中的元素.
multiply 数组元素相乘
divide、floor_divide 除法、向下整除法(丢弃余数)
power 对第一个数组中的元素A,根据第二数组中的相应元素B,计算A的B次方。
maximum、fmax 元素级的最大值计算。fmax将忽略NaN
minimum、fmin 元素级的最小值计算。fmin将忽略NaN
mod 元素级的求模计算.
copysign 将第二个数组中的值的符号复制给第一个数组中的值.
greater、greater_equal 执行元素级的运算比较,最终产生布尔类型数组

练习

import numpy as np

arr1 = np.random.randint(1, 10, (4, 5))
arr2 = np.random.randint(-10, -1, (4, 5))
arr1 

  

arr2

把数组2的符号复制给数组1

np.copysign(arr1, arr2)

  

arr3 = np.array([1, 2, np.nan, 3])
arr3

  

判断是不是NAN

np.isnan(arr3)

  

一元运算符练习

ndarray1 = np.array([3.5, 1.7, 2.2, -7.8, np.nan, 4.6, -3.4])
ndarray1

abs 计算整数、浮点数的绝对值

np.abs(ndarray1)

  

aqrt 计算各元素的平方根。相当于arr ** 0.5

np.square(ndarray1)

  

sign 计算各元素的正负号,1(正数)、0(零)、-1(负数)

np.sign(ndarray1)

  

ceil 计算各元素的celling值,即大于该值的最小整数

np.floor(ndarray1)

  

rint 将各元素值四舍五入到最近的整数,保留dtype

np.rint(ndarray1)

  

isnan 返回一个表示“那些是NaN(这不是一个数字)”的布尔类型数组.

np.isnan(ndarray1)

  

二元运算符

ndarray2 = np.random.randint(1, 20, (4, 5))
ndarray3 = np.random.randint(-10, 10, (4, 5))
ndarray3 = np.where(ndarray3 == 0, 1, ndarray3)
ndarray2

  

ndarray3

add 将数组中对应的元素相加  

np.add(ndarray2, ndarray3)

  

subtract 从第一个数组中减去第二个数组中的元素.  

np.subtract(ndarray2, ndarray3)

  

maximum、fmax 从两个数组中取出最大值。fmax将忽略NaN

np.maximum(ndarray2, ndarray3)

  

mod 元素级的求模计算.

np.mod(ndarray2, ndarray3)

  

copysign 将第二个数组中的值的符号复制给第一个数组中的值.

np.copysign(ndarray2, ndarray3)

  

greater、greater_equal 执行元素级的运算比较,最终产生布尔类型数组。

np.greater(ndarray2, ndarray3)

  

数组统计函数

可以通过数组上的一组数学函数对整个数组或某些数据进行统计计算。 基本的数组统计方法:

方法 说明
mean 算数平均数。零长度的数组的mean为NaN.
sum 所有元素的和.
max、min 所有元素的最大值,所有元素的最小值
std、var 所有元素的标准差,所有元素的方差
argmax、argmin 最大值的下标索引值,最小值的下标索引值
cumsum、cumprod 所有元素的累计和、所有元素的累计积

多维数组默认统计全部维度,axis参数可以按指定轴心统计,值为0则按列统计,值为1则按行统计。

示例代码:

import numpy as np

ndarray1 = np.random.randint(1, 10, (4, 5))
ndarray1
Out[1]:
array([[6, 2, 8, 5, 9],
       [1, 3, 7, 7, 7],
       [3, 8, 7, 3, 7],
       [4, 7, 5, 7, 3]])
 
1. sum求元素和
In [2]:
# 0-列 1-行
# sum-计算所有元素和
np.sum(ndarray1)
Out[2]:
109
In [3]:
# sum-计算每一列的元素和
np.sum(ndarray1, axis=0)
Out[3]:
array([14, 20, 27, 22, 26])
In [4]:
# sum-计算每一行的元素和
np.sum(ndarray1, axis=1)
Out[4]:
array([30, 25, 28, 26])
 
2. argmax求最大值索引
In [5]:
# argmax-默认情况下按照一维数组索引
np.argmax(ndarray1)
Out[5]:
4
In [6]:
# argmax-统计每一列最大
np.argmax(ndarray1, axis=0)
Out[6]:
array([0, 2, 0, 1, 0])
In [7]:
# argmax-统计每一行最大
np.argmax(ndarray1, axis=1)
Out[7]:
array([4, 2, 1, 1])
 
3. mean求平均数
In [8]:
# mean-求所有元素的平均值
np.mean(ndarray1)
Out[8]:
5.4500000000000002
In [9]:
# mean-求每一列元素的平均值
np.mean(ndarray1, axis=0)
Out[9]:
array([ 3.5 ,  5.  ,  6.75,  5.5 ,  6.5 ])
In [10]:
# mean-求每一行元素的平均值
np.mean(ndarray1, axis=1)
Out[10]:
array([ 6. ,  5. ,  5.6,  5.2])
 
4. cumsum求元素累计和
In [11]:
# cumsum-前面元素的累计和
np.cumsum(ndarray1)
Out[11]:
array([  6,   8,  16,  21,  30,  31,  34,  41,  48,  55,  58,  66,  73,
        76,  83,  87,  94,  99, 106, 109])
In [12]:
# cumsum-每一列元素的累计和
np.cumsum(ndarray1, axis=0)
Out[12]:
array([[ 6,  2,  8,  5,  9],
       [ 7,  5, 15, 12, 16],
       [10, 13, 22, 15, 23],
       [14, 20, 27, 22, 26]])
In [13]:
# cumsum-每一行元素的累计和
np.cumsum(ndarray1, axis=1)
Out[13]:
array([[ 6,  8, 16, 21, 30],
       [ 1,  4, 11, 18, 25],
       [ 3, 11, 18, 21, 28],
       [ 4, 11, 16, 23, 26]])

练习代码2

import numpy as np

arr1 = np.random.randint(1, 10, (3, 4))
arr1

  

算数平均数

arr1.mean()

  

axis 轴

  axis=0 求列的平均数

  axis=1 求行的平均数

axis=0 求列的平均数

arr1.mean(axis=0)

  

axis=1 求行的平均数

arr1.mean(axis=1)

  

sum函数求和

arr1.sum()

  

求列的和

arr1.sum(axis=0)

  

求行的和

arr1.sum(axis=1)

  

累积和 cumsum

每个元素都是前边所有的想加

arr1.cumsum()

  

all和any函数

import numpy as np

ndarray1 = np.arange(6).reshape((2, 3))
ndarray2 = np.arange(6).reshape((2, 3))
ndarray3 = np.array([[ 0,  1,  2], [ 8,  9, 10]])

  

if (ndarray1 == ndarray2).all():
    print('相等')
else:
    print('不相等')

  

(ndarray1 == ndarray3).all()

  

if (ndarray1 == ndarray3).any():
    print('两个数组中有元素相等!')
else:
    print('都不相等!')

  

添加和删除函数

方法 描述
delete Return a new array with sub-arrays along an axis deleted.
insert(arr, obj, values[, axis]) Insert values along the given axis.
append(arr, values[, axis]) Append values to the end of an array.
resize(a, new_shape) Return a new array with the specified shape.
concatenate((a1,a2,...), axis=0) Join a sequence of arrays along an existing axis.

reshape:有返回值,即不对原始多维数组进行修改; resize:无返回值,即会对原始多维数组进行修改;

import numpy as np

arr1 = np.random.randint(1, 10, (5, 5))
arr1

  

delete方法删除一行或者一列元素

# 如果没有指定行列,默认删除位置元素(将二维数组当做一维数组来计算位置)

np.delete(arr1, 0)

  

按照行删除
删除每一列的第1个位置的元素

np.delete(arr1, 1, axis=0)

  

按照列删除
删除每一行的第1个位置的元素

np.delete(arr1, 0, axis=1)

  

. insert插入一行或者一列元素

arr2 = np.random.randint(1, 10, (5, 5))
arr2

  

插入一行元素

np.insert(arr2, 0, [100, 200, 300, 400, 500], axis=0)

  

插入一列元素

np.insert(arr2, 1, [11, 22, 33, 44, 55], axis=1)

  

append追加元素

把二维数组变成一维数组

np.append(arr2, 100)

  

concatenate合并

arr3 = np.random.randint(1, 10, (4, 3))
arr3

  

arr4 = np.random.randint(1, 10, (4, 3))
arr4

  

默认将第二个数组合并到第一个数组的垂直下面

np.concatenate([arr3, arr4])

  

横向合并两个数组

np.concatenate([arr3, arr4], axis=1)

  

唯一化和集合函数

Numpy提供了一些针对一维ndarray的基本集合运算。最常用的就是np.unique了,它用于找出数组中的唯一值并返回已排序的结果。

方法 说明
unique(x) 计算x中的唯一元素,并返回有序结果.
intersect1d(x, y) 计算x和y中的公共元素,并返回有序结果.
union1d(x, y) 计算x和y的并集,并返回有序结果.
in1d(x, y) 得到一个表示“x的元素是否包含于y”的布尔型数组.
setdiff1d(x, y) 集合的差,即元素在x中且不再y中.
import numpy as np

arr1 = np.random.randint(1, 3, 10)
arr1

  

去除重复元素

np.unique(arr1)

  

arr2 = np.arange(10)
arr3 = np.arange(5, 15)
arr2

  

arr3

  

求两个一维数组的交集

np.intersect1d(arr2, arr3)

  

数组A中的元素是否在数组B中存在

np.in1d(arr2, arr3)

  

随机数生成函数

numpy.random模块对Python内置的random进行了补充。我们使用numpy.random可以很方便根据需要产生大量样本值。而python内置的random模块则一次生成一个样本值.

函数 说明
permutation 如果给的数字,则生成指定个数随机数 ,如果是数组,则打乱数组返回.
shuffle 打乱一个序列的原有顺序.
randint 从给定的上下限随机选取整数.
import numpy as np

arr1 = np.arange(10)
arr1

  

如果permutation参数是数组,那么打乱数组元素顺序
如果参数是数字,随机生成指定个数的随机数
打乱数组之后,返回打乱之后的元素序列副本

打乱数组的顺序

np.random.permutation(arr1)

  

生成指定个数的随机数

np.random.permutation(10)

  

打乱数组本身元素的顺序

对原有的数组进行了修改

np.random.shuffle(arr1)
arr1

  

数组排序函数

import numpy as np

arr1 = np.random.randint(1, 10, (5, 5))
arr1

默认按行排序

arr1.sort()
arr1

  

指定按列排序

arr1.sort(axis=0)
arr1

  

没有从大到小排序

但可以这样

arr1[:, 1][::-1]

  

argsort ()函数的使用,返回的是排序后的下标(不对原数组修改)

arr2 = np.random.randint(10, 100, 5)
arr2

  

arr2.argsort()

  

arr2[arr2.argsort()]

arr2_index[arr2.argsort()]

  

argsort ()函数不对原数组进行修改,只对下标进行排序

arr2

还是原来创建的数据

  

数组文件输入输出

Numpy能够读写磁盘上的文本数据和二进制数据。后面的课程我们会学习pandas中用于表格型数据读取到内存的工具。

np.save和np.load是读写磁盘数组数据的两个主要函数。默认情况下,数组是以原始二进制格式保存在扩展名为.npy的文件中。如果在保存文件时没有指定扩展名.npy,则该扩展名会被自动加上。

通过np.savez可以将多个数组保存到同一个文件中,将数组以关键字参数的形式传入即可。

例如: np.savez(‘myarr.npz’, a=arr1, b=arr2) 加载文件的时候,我们会得到一个类似字典的对象。

将数组写入到文件中(np.save(文件名,保存的数组))
import numpy as np

arr1 = np.arange(25).reshape((5, 5))
arr1

  

np.save('my_arr1', arr1)

  

从文件中读取数组(np.load('文件名'))
np.load('my_arr1.npy')

  

多个数组的读写
arr2 = np.arange(25, 50).reshape((5, 5))
arr2

  

把多个数组写入文件中(np.savez('文件名', a=数组1, b=数组2))

np.savez('multi_files', a=arr1, b=arr2)

  

从文件中读取各个数组
np.load('multi_files.npz')['a']

  

np.load('multi_files.npz')['b']

  

读写文本文件

从文件中加载文本是一个非常标准的任务。Python中的文件读写函数的格式很容易将新手搞晕,所以我们使用np.loadtxt或者更加专门化的np.genfromtxt将数据加载到普通的Numpy数组中。 这些函数都有许多选项可供使用:指定各种分隔符、跳过行数等。我们以一个简单的逗号分割文件(csv)为例:

把数组存入文件中

np.savetxt('文件名', 数组, delimiter='分隔符', fmt='%s') %s是普通字符串
# 以逗号分割的格式为csv格式
np.savetxt('my_arr_data.txt', arr1, delimiter=',', fmt='%s')

  

把数组从文件中读取 -------》np.genfromtxt('文件名', delimiter=',', skip_header=1, skip_footer=1, dtype=np.str
np.genfromtxt('my_arr_data.txt', delimiter=',', skip_header=1, skip_footer=1, dtype=np.str)

 

以字符串类型读取,跳过首行和结尾的一行

  

np.genfromtxt('my_arr_data.txt', delimiter=',', skip_header=1, skip_footer=1)

  

 

3 数据分析之Numpy模块(2)的更多相关文章

  1. 数据分析01 /numpy模块

    数据分析01 /数据分析之numpy模块 目录 数据分析01 /数据分析之numpy模块 1. numpy简介 2. numpy的创建 3. numpy的方法 4. numpy的常用属性 5. num ...

  2. 【Python 数据分析】Numpy模块

    Numpy模块可以高效的处理数据,提供数组支持.很多模块都依赖他,比如:pandas.scipy.matplotlib 安装Numpy 首先到网站:https://www.lfd.uci.edu/~g ...

  3. 2 数据分析之Numpy模块(1)

    Numpy Numpy(Numerical Python的简称)是高性能科学计算和数据分析的基础包.它是我们课程所介绍的其他高级工具的构建基础. 其部分功能如下: ndarray, 一个具有复杂广播能 ...

  4. 数据分析之numpy模块

    numpy(numerical python)是python语言的一个扩展程序库,支持大量的维度数组和矩阵运算,此外也针对数组提供大量的数学函数库. 一.创建数组 1 使用array()创建 impo ...

  5. Python数据分析之numpy学习

    Python模块中的numpy,这是一个处理数组的强大模块,而该模块也是其他数据分析模块(如pandas和scipy)的核心. 接下面将从这5个方面来介绍numpy模块的内容: 1)数组的创建 2)有 ...

  6. (转)Python数据分析之numpy学习

    原文:https://www.cnblogs.com/nxld/p/6058572.html https://morvanzhou.github.io/tutorials/data-manipulat ...

  7. 开发技术--Numpy模块

    开发|Numpy模块 Numpy模块是数据分析基础包,所以还是很重要的,耐心去体会Numpy这个工具可以做什么,我将从源码与 地产呢个实现方式说起,祝大家阅读愉快! Numpy模块提供了两个重要对象: ...

  8. numpy模块常用函数解析

    https://blog.csdn.net/lm_is_dc/article/details/81098805 numpy模块以下命令都是在浏览器中输入. cmd命令窗口输入:jupyter note ...

  9. numpy模块、matplotlib模块、pandas模块

    目录 1. numpy模块 2. matplotlib模块 3. pandas模块 1. numpy模块 numpy模块的作用 用来做数据分析,对numpy数组(既有行又有列)--矩阵进行科学计算 实 ...

随机推荐

  1. MySQL优化特定类型的查询

    优化关联查询 如果想要优化使用关联的查询,我们需要特别留意以下几点: 确保ON或者USING子句中的列上有索引.在创建索引的时候需要考虑到关联的顺序.当表A和表B用列c关联的时候,如果优化器的关联顺序 ...

  2. springboot之mybatis注解形式

    springboot整合mybatis对数据库进行访问,本实例采用注解的方式,如下: pom.xml文件 <parent> <groupId>org.springframewo ...

  3. [总结]WEB前端开发常用的CSS/CSS3知识点

    css3新单位vw.vh.vmin.vmax vh: 相对于视窗的高度, 视窗被均分为100单位的vh; vw: 相对于视窗的宽度, 视窗被均分为100单位的vw; vmax: 相对于视窗的宽度或高度 ...

  4. C++玄学预编译优化

    #pragma GCC diagnostic error "-std=c++11" #pragma GCC optimize("-fdelete-null-pointer ...

  5. (最简单)红米手机5A的USB调试模式在哪里开启的方法

    当我们使用安卓手机链接Pc的时候,或者使用的有些APP比如我们公司营销小组当使用的APP引号精灵,之前使用的老版本就需要开启usb调试模式下使用,现当新版本不需要了,如果手机没有开启usb调试模式,P ...

  6. ARM汇编指令集_学习笔记(1)

    一.什么是ARM汇编? 运行在ARM处理器上的汇编语言就叫ARM汇编. C程序运行在X86平台,底层就是X86汇编:运行在ARM平台,底层就是ARM汇编.ARM汇编与X86汇编有显著区别. X86属于 ...

  7. 南京邮电大学 JavaA期末复习要点总结

    南京邮电大学 JavaA复习要点: Chap1 入门 1.  Java应用程序开发过程教材P14~P15 Chap 2 基本语法 1.      标识符的命名规则教材P19 字母下划线美元符号开头,除 ...

  8. Yapi部署说明

    1.环境搭建 确保 node 版本=> 7.6,请运行 node -v 查看版本号 确保 mongodb 版本 => 2.6,请运行 mongo --version 查看版本号 确保安装了 ...

  9. window64位电脑如何通过VMware Workstation12.5.6安装苹果操作系统 macOS High Sierra 10.13

    1.下载 VMware-workstation-full-12.5.6.exe,macOS High Sierra 10.13.iso 2.安装 VMware-workstation时不要选择C盘,因 ...

  10. 一致性哈希算法----nginx负载均衡器配置之一

    一直性Hash算法在很多场景下都有应用,尤其是在分布式缓存系统中,经常用其来进行缓存的访问的负载均衡,比如:redis等<k,v>非关系数据库作为缓存系统.我们首先来看一下采用取模方式进行 ...