NumPy基础操作(2)
NumPy基础操作(2)
(注:记得在文件开头导入import numpy as np)
目录:
- 写在前面
- 转置和轴对换
- NumPy常用函数
写在前面
本篇博文主要讲解了普通转置array.T、轴对换array.swapaxes()、高维转置array.transpose()、绝对值函数np.abs()、np.maximum()、np.argmax()、np.argmin()等函数的调用方法和注意事项
转置和轴对换
array.T
arr = np.arange(16).reshape((4,4))
print(arr)
print("************")
print(arr.T) #.T进行数组的转置
#输出结果
'''
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
************
[[ 0 4 8 12]
[ 1 5 9 13]
[ 2 6 10 14]
[ 3 7 11 15]]
'''这里可以看到arr.T的转置直接以正对角线为对称轴进行数组转置,这里有一点需要注意arr.T是对源数据进行复制后进行的操作,因此执行操作后不会改变源数据。
array.swapaxes()
arr = np.arange(9).reshape((3,3))
print(arr.swapaxes(0,1)) #第一个维度与第二个维度数据进行交换,也就是第i行与第i列数据进行交换
print("************")
print(arr) #swapaxes也是在复制原数组的基础上进行的操作,不会更改原数组
#输出结果
'''
[[0 3 6]
[1 4 7]
[2 5 8]]
************
[[0 1 2]
[3 4 5]
[6 7 8]]
'''array.transpose()
arr = np.arange(16).reshape((2, 2, 4))
print(arr)
print("************")
print(arr.transpose((2, 1, 0))) #三维数组,有三个维度,将第三个维度变为第二个维度,第二维度变成第一维度,第一维度变为第三维度
#输出结果
'''
[[[ 0 1 2 3]
[ 4 5 6 7]] [[ 8 9 10 11]
[12 13 14 15]]]
************
[[[ 0 8]
[ 4 12]] [[ 1 9]
[ 5 13]] [[ 2 10]
[ 6 14]] [[ 3 11]
[ 7 15]]]
'''
#从输出结果可以看出原来第三维有四个元素,现在第一维变成第三维,第一维度变成四个元素,其他维度以此类推
NumPy常用函数
常用函数简单说明(包含的有些冗杂了,不必全记得)
函数 说明 abs、fabs 计算整数、浮点数或复数的绝对值。对于非复数值,使用fabs可以更快计算 sqrt 计算数组各元素的平方根。 square 计算数组各元素的平方。 exp 计算各元素的指数ex log、log10、log2、log1p 分别计算自然对数(底数为e)、底数为10的log、底数为2的log以及底数为e的log(1+x)。 sign 计算数组各元素的正负号:1(正数)、0(零)、-1(负数)。 ceil 取数组各元素大于等于该值的最小整数,相当于对各元素向上取整 floor 取数组各元素小于等于该值的最大整数,相当于对各元素向下取整 rint 将各元素值四舍五入到最接近的整数,保留dtype modf 将数组的小数和整数部分以两个独立数组的形式返回 isnan 返回一个表示“哪些值是NaN”的布尔型数组 isfinite、isinf 返回一个表示“哪些元素值是有穷的”、“哪些元素值是无穷的”布尔型数组 cos、sin、tan 返回分别一个数组各元素的余弦、正弦和正切数组 add 将数组中对应元素相加 subtract 从第一个数组中减去第二个数组的元素 multiply 数组元素相乘 divide、floor_divide 数组的除法、忽略余数的除法 power 对第一个数组中的元素A和第二个数组中相同位置的元素B计算AB后,放到对应位置上 maximum、fmax 元素级的最大值计算。fmax将忽略NaN minimum、fmin 元素级的最小值计算。fmin将忽略NaN mod 元素级的求模运算 copysign 将第二个数组中的值的符号复制给第一个数组中的值 greater、greater_equal、less、less_equal、equal、not_equal 执行元素级的比较运算,返回布尔型的数组。对应运算符>、≥、<、≤、==、!= logical_and、logical_or、logical_xor 执行元素级的真值逻辑运算。对应运算符&、|、^(异或) np.where(cond, xarr, yarr) x if condition else y的矢量化,当cond中的值为True时选取xarr的值,否则选yarr的值 array.mean() 对数组中全部元素或者某轴向求算数平均。用axis指定轴向 array.sum() 对数组中全部元素或者某轴向求算数平均。用axis指定轴向 array.std()、array.var() 对数组中全部元素求标准差和方差 array.min()、array.max() 求数组中元素的最小值和最大值 array.argmin() array.argmax() 返回元素中最小值和最大值的索引号 array.cumsum()、array.cumprod() 计算数组中元素的累计和、累计积 bools_arr.all()、bools_arr.any() 检查布尔型数组中是否全是True或者至少有一个是True array.sort() 对数组进行从小到大排序 np.unique(x)、np.intersect1d(x,y) 计算x中的唯一元素,并返回有序结果、计算x和y中的交集,并返回有序结果 np.union1d(x,y) 计算x和y的并集,并返回有序结果 np.in1d(x,y) 返回一个表示“x的元素是否包含于y”的布尔型数组 np.setdiff1d(x,y) 两个集合的差,即元素在x中但不在y中
部分函数使用操作
np.abs()
arr = np.random.randn(9).reshape((3,3))
print(arr)
print("************")
arr_abs = np.abs(arr)
print(arr_abs)
#输出结果
'''
[[-0.58979776 0.01673949 1.22808794]
[-2.44004574 - 0.36391562 - 1.68938497]
[0.25851057 - 0.05289508 - 1.1986467]]
** ** ** ** ** **
[[0.58979776 0.01673949 1.22808794]
[2.44004574 0.36391562 1.68938497]
[0.25851057 0.05289508 1.1986467 ]]
'''np.sqrt()
arr = np.random.randn(9).reshape((3,3))
print(arr)
print("************")
arr_abs = np.abs(arr) #因为随机生成的复数没有平方根,所以这里把它正值化
arr_sqrt = np.sqrt(arr_abs)
print(arr_sqrt)
#输出结果
'''
[[ 1.24656464 0.46394912 0.05438404]
[ 0.81477287 -1.38440578 -1.11762692]
[-0.70715997 1.72679159 -0.95080044]]
************
[[1.11649659 0.68113811 0.23320385]
[0.9026477 1.17660774 1.05717876]
[0.84092804 1.31407442 0.97508997]]
'''np.exp()
arr = np.arange(4).reshape((2, 2))
print(arr)
print("************")
arr_exp = np.exp(arr)
print(arr_exp)
#输出结果
'''
[[0 1]
[2 3]]
************
[[ 1. 2.71828183]
[ 7.3890561 20.08553692]]
'''np.log1p()
arr = np.arange(1, 5).reshape((2, 2))
print(arr)
print("************")
arr_log1p = np.log1p(arr) #log1p(x) := log(1+x)(自然对数),元素级操作
print(arr_log1p)
#输出结果
'''
[[1 2]
[3 4]]
************
[[0.69314718 1.09861229]
[1.38629436 1.60943791]]
'''
log1p()函数的作用主要是数据平滑处理,处理当计算数组过小时计算浮点精度损失的情况。(若想进一步了解log1p()函数的相关计算原理请参看这篇博文:https://blog.csdn.net/liyuanbhu/article/details/8544644)
np.rint()
arr = np.random.randn(4).reshape((2, 2))
print(arr)
print("************")
arr_rint = np.rint(arr) #将各元素值四舍五入转换为最接近的整数
print(arr_rint)
#输出结果
'''
[[-0.86550191 1.64419254]
[-0.51164907 0.06845004]]
************
[[-1. 2.]
[-1. 0.]]np.sign()
arr = np.random.randn(4).reshape((2, 2))
print(arr)
print("************")
arr_sign = np.sign(arr) #计算各元素值的符号:正为1,负为-1,零为0
print(arr_sign)
#输出结果
'''
[[-0.21646709 0.40155285]
[ 0.72099109 -0.32066459]]
************
[[-1. 1.]
[ 1. -1.]]
'''np.modf()
arr = (np.random.randn(4).reshape((2, 2))) * 5
print(arr)
print("************")
arr_modf = np.modf(arr) #分别返回各元素值的整数部分与小数部分
print(arr_modf)
#输出结果
'''
[[-1.31916494 8.26473292]
[ 2.20634408 -0.14092464]]
************
(array([[-0.31916494, 0.26473292],
[ 0.20634408, -0.14092464]]),
array([[-1., 8.],
[ 2., -0.]]))
'''np.add()
arr1 = np.arange(4).reshape((2, 2))
arr2 = np.arange(4).reshape((2, 2))
print(arr1)
print(arr2)
print("************")
arr_add = np.add(arr1, arr2) #各元素值对应相加
print(arr_add)
#输出结果
'''
[[0 1]
[2 3]]
[[0 1]
[2 3]]
************
[[0 2]
[4 6]]
'''
np.add()函数只能进行二元操作,输入操作数只能是两个
np.subtract()
arr1 = np.arange(4).reshape((2, 2))
arr2 = np.arange(4).reshape((2, 2)) * 2
print(arr1)
print(arr2)
print("************")
arr_subtract = np.subtract(arr1, arr2) #各元素值对应相减
print(arr_subtract)
#输出结果
'''
[[0 1]
[2 3]]
[[0 2]
[4 6]]
************
[[ 0 -1]
[-2 -3]]
'''np.maximum()
arr1 = np.random.randn(4).reshape((2, 2))
arr2 = np.random.randn(4).reshape((2, 2))
print(arr1)
print(arr2)
print("************")
arr_maximum = np.maximum(arr1, arr2) #各元素值对应相比较,取较大的放在对应位置上
print(arr_maximum)
#输出结果
'''
[[-0.13552856 -0.19105196]
[ 0.38300898 -1.67164528]]
[[ 0.08309537 -1.33379454]
[-1.03875546 0.62144675]]
************
[[ 0.08309537 -0.19105196]
[ 0.38300898 0.62144675]]
'''np.copysign()
arr1 = np.random.randn(4).reshape((2, 2))
arr2 = np.random.randn(4).reshape((2, 2))
print(arr1)
print(arr2)
print("************")
arr_copysign = np.copysign(arr1, arr2) #新生成的arr_copysign使用第一个数组的值,第二个数组的符号
print(arr_copysign)
#输出结果
'''
[[-0.04938378 -0.18659454]
[-0.07878375 -1.9639056 ]]
[[ 0.65798049 -1.69537425]
[ 0.10808436 -0.58918707]]
************
[[ 0.04938378 -0.18659454]
[ 0.07878375 -1.9639056 ]]
'''np.greater_equal()
arr1 = np.random.randn(4).reshape((2, 2))
arr2 = np.random.randn(4).reshape((2, 2))
print(arr1)
print(arr2)
print("************")
arr_greater_equal = np.greater_equal(arr1, arr2) #进行arr1 ≥ arr2比较,返回布尔型数组
print(arr_greater_equal)
#输出结果
'''
[[ 2.42425288 -0.1535605 ]
[-0.09387474 0.07655643]]
[[-0.56279806 0.55879896]
[ 0.199348 1.33215315]]
************
[[ True False]
[False False]]
'''np.logical_and()
arr1 = np.random.randn(4).reshape((2, 2))
arr2 = np.arange(4).reshape((2, 2))
print(arr1)
print(arr2)
print("************")
arr_logical_and = np.logical_and(arr1, arr2) #对两个数组进行逻辑真值与操作,返回布尔型数组
print(arr_logical_and)
#输出结果
'''
[[-1.81030446 -1.04702541]
[-0.17202973 1.7891667 ]]
[[0 1]
[2 3]]
************
[[False True]
[ True True]]
'''np.where()
xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
cond = np.array([True, False, True, False, False])
result = np.where(cond, xarr, yarr)
print(result)
#输出结果
'''
[1.1 2.2 1.3 2.4 2.5]
'''np.unique(x)
names = np.array(['Bob', 'Joe', 'Will', 'Jason', 'Morvan', 'Morvan', 'Joe'])
result = np.unique(names) #找出数组其中唯一的值,并返回已排序的结果
print(result)
#输出结果
'''
['Bob' 'Jason' 'Joe' 'Morvan' 'Will']
'''np.intersect1d(x,y)、 np.union1d(x,y)
names1 = np.array(['Bob', 'Joe', 'Will', 'Jason', 'Morvan', 'Morvan', 'Joe'])
names2 = np.array(['Jayhe', 'Joe', 'Jobs', 'Jason', 'Morvan', 'Jayheyang'])
result1 = np.intersect1d(names1, names2) #计算names1与names2的交集,并返回有序的结果
result2 = np.union1d(names1, names2) #计算names1与names2的并集,并返回有序的结果
print(result1)
print(result2)
#输出结果
'''
['Jason' 'Joe' 'Morvan']
['Bob' 'Jason' 'Jayhe' 'Jayheyang' 'Jobs' 'Joe' 'Morvan' 'Will']
'''np.in1d(x, y)
values = np.array([6, 0, 0, 3, 2, 5, 6])
result = np.in1d(values, [2, 3, 6]) #得到一个"values是否包含于[2, 3, 6]"的布尔型数组
print(result)
#输出结果
'''
[ True False False True True False True]
'''np.setdiff1d(x,y)
values = np.array([6, 0, 0, 3, 2, 5, 6])
result = np.setdiff1d(values, [2, 3, 6]) #得到一个由元素在values中不在[2, 3, 6]中的数组
print(result)
#输出结果
'''
[0 5]
'''array.min()、array.max()
values = np.array([6, 0, 0, 3, 2, 5, 6])
result_max = values.max()
result_min = values.min()
print(result_max)
print(result_min)
#输出结果
'''
6
0
'''array.argmin()、array.argmax()
values = np.array([6, 0, 0, 3, 2, 5, 6])
result_argmax = values.argmax() #返回数组中元素最大值对应的索引号
result_argmin = values.argmin()
print(values[result_argmax])
print(values[result_argmin])
#输出结果
'''
6
0
'''bools_array.any()
values = np.array([ True, False, False, True, True, False, True])
result_any = values.any()
result_all = values.all() #数组中是不是每个元素都是True
print(result_any)
print(result_all)
#输出结果
'''
True
False
'''
NumPy基础操作(2)的更多相关文章
- numpy 基础操作
Numpy 基础操作¶ 以numpy的基本数据例子来学习numpy基本数据处理方法 主要内容有: 创建数组 数组维度转换 数据选区和切片 数组数据计算 随机数 数据合并 数据统计计算 In [1]: ...
- NumPy基础操作
NumPy基础操作(1) (注:记得在文件开头导入import numpy as np) 目录: 数组的创建 强制类型转换与切片 布尔型索引 结语 数组的创建 相关函数 np.array(), np. ...
- NumPy基础操作(3)——代数运算和随机数
NumPy基础操作(3)--代数运算和随机数 (注:记得在文件开头导入import numpy as np) 目录: NumPy在矩阵运算中的应用 常用矩阵运算函数介绍 编程实现 利用NumPy生成随 ...
- [笔记]NumPy基础操作
学机器学习做点小笔记,都是Python的NumPy库的基本小操作,图书馆借的书看到的,怕自己还了书后忘了,就记下来. 一般习惯导入numpy时使用 import numpy as np ,不要直接im ...
- 学习Numpy基础操作
# coding:utf-8 import numpy as np from numpy.linalg import * def day1(): ''' ndarray :return: ''' ls ...
- [笔记]SciPy、Matplotlib基础操作
NumPy.SciPy.Matplotlib,Python下机器学习三大利器.上一篇讲了NumPy基础操作,这节讲讲SciPy和Matplotlib.目前接触到的东西不多,以后再遇到些比较常用的再更新 ...
- 《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算
http://www.cnblogs.com/batteryhp/p/5000104.html 第四章 Numpy基础:数组和矢量计算 第一部分:numpy的ndarray:一种多维数组对象 实话说, ...
- 利用Python进行数据分析——Numpy基础:数组和矢量计算
利用Python进行数据分析--Numpy基础:数组和矢量计算 ndarry,一个具有矢量运算和复杂广播能力快速节省空间的多维数组 对整组数据进行快速运算的标准数学函数,无需for-loop 用于读写 ...
- [转]python与numpy基础
来源于:https://github.com/HanXiaoyang/python-and-numpy-tutorial/blob/master/python-numpy-tutorial.ipynb ...
随机推荐
- 样式声明对象:document.styleSheets[0].rules[4].style;
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- java 练习(公司年销售额求和)
/*B:公司年销售额求和 某公司按照季度和月份统计的数据如下:单位(万元) 第一季度:22,66,44 第二季度:77,33,88 第三季度:25,45,65 第四季度:11,66,99 */ int ...
- 中断点异常 STATUS_BREAKPOINT(0x80000003)
简介 STATUS_BREAKPOINT,值为0x80000003,称为中断指令异常,表示在系统未附加内核调试器时遇到断点或断言. 触发条件 通常中断指令异常可以在以下条件下触发: 硬代码中断请求,如 ...
- pgloader 方便的数据迁移工具
pgloader 是一个支持多种数据源迁移到pg 数据库的工具,高性能,使用灵活同时作者 也提供了docker 版本的镜像,今年3月份使用此工具的时候,发现好久都没更新了,但是 最近作者有了新版本的发 ...
- JS全局变量是如何工作的?
JS全局变量是如何工作的? <script> const one = 1; var two = 2; </script> <script> // All scrip ...
- CSS行内块元素(内联元素)
一.典型代表 input img 二.特点: 在一行上显示 可以设置宽高 <style type="text/css"> img{ width: 300px; /* 顶 ...
- 一个100%Go语言的Web-Term-SSH 堡垒机项目
SSH-Fortress 1. What does it do? Make your cluster servers be more safe by expose your SSH connectio ...
- Java-JUC(十三):现在有两个线程同时操作一个整数I,做自增操作,如何实现I的线程安全性?
问题分析:正如i在多线程中如果想实现i的多线程操作,必须i要使用volitle来保证其内存可见性,但是i++自增操作不具备原子性操作,因此需要对i++这段代码确保其原子性操作即可. 方案1: 使用Re ...
- 【mybatis源码学习】mybatis的sql语句映射
一.重要的接口和类 org.apache.ibatis.scripting.LanguageDriver //语言驱动org.apache.ibatis.scripting.xmltags.XMLLa ...
- Node.js 实现第一个应用以及HTTP模块和URL模块应用
/* 实现一个应用,同时还实现了整个 HTTP 服务器. * */ //1.引入http模块 var http=require('http'); //2.用http模块创建服务 /* req获取url ...