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 ...
随机推荐
- tox python项目虚拟环境管理自动化测试&&构建工具
tox 是一个方便的工具,可以帮助我们管理python 的虚拟环境,同时可以进行项目自动测试以及构建 tox 如何工作的 说明 从上图我们也可以看出如何在我们项目中使用tox 参考资料 https:/ ...
- 洛谷 P1880 [NOI1995]石子合并 题解
P1880 [NOI1995]石子合并 题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试 ...
- pycharm2018.2.1破解、汉化
##我只是一个搬运工 -_- (一)先破解,破解教程直接给个网址吧,感谢各位大神的无私奉献:https://blog.csdn.net/u014044812/article/details/78 ...
- Spark-Streaming DirectKafka count 案例
Spark-Streaming DirectKafka count 统计跟直接 kafka 统计类似,只不过这里使用的是 Direct 的方式,Direct方式使用的 kafka 低级API,不同的地 ...
- 数据结构---公交线路提示系统05(内附读取表格+迪杰斯特拉算法Java代码)
今天做的最多的事情就是纠错了,通过添加输出语句判断错误来源: 找到错误来源: wb = new XSSFWorkbook(input);//语句创建错误 网上查询发现是jar包的问题: 下图为poi的 ...
- docker不能正常使用cron任务
基于centos7的docker不能正常使用cron任务问题 修改docker centos7镜像对应的容器的/etc/pam.d/crond文件 把required 修改成sufficient,如下 ...
- 腾讯云手动搭建nginx+php-fpm并自启动
自己一点小爱好,搭建了一个小网站植物大战僵尸百科, 使用的是腾讯云,市场里的镜像不好用,所以自己手动搭建一波. centos 7 编译安装 php-7.2.11的步骤 在官网下载php-7.2.11的 ...
- Artifact tlks: com.intellij.javaee.oss.admin.jmx.JmxAdminException: com.intellij.execution.ExecutionException: E:\IDEAspace\tlksArtfacts\tlks.war not found for the web module.
传送门:https://www.cnblogs.com/eatkid/p/8064763.html intellij idea tomcat 启动不生成war包 intellij idea tom ...
- NCCloud
NC后台核心服务开发模式不变 NC原Client代码废弃 增加NC Web端Java代码 增加前端JS代码 原有的NC公共能力基本保留:模板.精度.自定义项等
- 《The Boost C++ Libraries》 第一章 智能指针
Boost.SmartPointers中提供了多种智能指针,它们采用在智能指针析构时释放内存的方式,帮助管理动态分配的对象.由于析构函数在智能指针生命周期结束时被执行,所以由它管理的动态分配对象可以保 ...