- 浏览: 86326 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
songfantasy:
不错,学习了
java与c/c++之间的数据交互-----jni点滴 -
wen0301:
有时间,读读看,并且看看花多长时间。
为了练好口语,你敢不敢每天读一遍,坚持一个月? -
wen0301:
加一些 代码,效果会更好。。。
设计模式:简单工厂、工厂方法、抽象工厂之小结与区别 -
wen0301:
能加一些实际代码 效果会更好吧~~
设计模式:简单工厂、工厂方法、抽象工厂之小结与区别 -
lijiancool:
每天一遍,都不要做其他事情了,哦滴神呀。。。。
为了练好口语,你敢不敢每天读一遍,坚持一个月?
概述
本节主要讲解numpy数组的加减乘除四则运算。 np.array()返回的是numpy的数组,官方称为:ndarray,也就是N维数组对象(矩阵),N-dimensional array object。 这个对象的特性跟矩阵的特性也比较接近,因此我这里有时就将其混称为数组/矩阵了。
数组加法
例如:
import numpy as np
a = np.array([10, 20, 30, 40])
print("a:", a)
b = np.arange(4)
print("b:", b)
c = a + b
print("c=a+b:", c)
输出结果为:
a: [10 20 30 40]
b: [0 1 2 3]
c=a+b: [10 21 32 43]
从例子中我们可以看出数组/矩阵的加法就是把两个数组/矩阵中对应的元素进行相加,组成一个新的数组/矩阵。 那如果两个数组/矩阵的维度不一样,可否进行相加呢? 比如在上面的例子中,我们如果把b数组的数据修改成自由3个元素的,我们来看下会发生什么事情:
import numpy as np
a = np.array([10, 20, 30, 40])
print("a:", a)
b = np.arange(3)
print("b:", b)
c = a + b
print("c=a+b:", c)
输出为:
a: [10 20 30 40]
b: [0 1 2]
Traceback (most recent call last):
File "E:/learn/numpy/lesson3/main.py", line 8, in <module>
c = a + b
ValueError: operands could not be broadcast together with shapes (4,) (3,)
直接报错了,也就是如果两个数组/矩阵不是相同维度的,则不能进行相加。
我们再来看个例子:
import numpy as np
a = np.array([10, 20, 30, 40])
print("a:", a)
b = 4
print("b:", b)
c = a + b
print("c=a+b:", c)
输出为:
a: [10 20 30 40]
b: 4
c=a+b: [14 24 34 44]
在这个例子中,我们用一个数组/矩阵加上一个数字,结果是这个数组/矩阵中的元素分别加上了这个数字组成一个新的数组/矩阵。 那这里这个数字的形状跟a数组/矩阵的形状其实是不一样的,但结果还是能够相加,这是怎么回事呢?
其实,numpy会自动尝试把数字或矩阵进行broadcast操作,以便于尽可能地进行矩阵计算,这里就把单个数字扩展成了跟a数组/矩阵一样形状的数组/矩阵,然后进行数组/矩阵的相加。 而之前那个报错的例子中是因为两个数组/矩阵无法进行扩展成相同的形状而进行数组/矩阵的相加。
数组/矩阵的减法
数组/矩阵减法跟数组/矩阵的加法一样,这里就不重复了。
数组的乘法
看例子:
import numpy as np
a = np.array([10, 20, 30, 40])
print("a:", a)
b = np.arange(4)
print("b:", b)
c = a * b
print("c=a*b:", c)
输出为:
a: [10 20 30 40]
b: [0 1 2 3]
c=a*b: [ 0 20 60 120]
看起来乘法也不难,就是两个数组中对应元素的相乘,可以认为是矩阵的数乘。 在上面的例子中,如果b=4,则numpy会用用广播(broadcast)方式把数字4扩展成跟a相同维度但其元素都为4的数组,然后再进行对应元素相乘的方式。 具体实现为:
import numpy as np
a = np.array([10, 20, 30, 40])
print("a:", a)
b = 4
print("b:", b)
c = a * b
print("c=a*b:", c)
输出为:
a: [10 20 30 40]
b: 4
c=a*b: [ 40 80 120 160]
学过线性代数的都知道,在矩阵中有两种乘法:点乘和叉乘。 向量:u=(u1,u2,u3) v=(v1,v2,v3) 点积公式:u * v = u1v1+u2v2+u3v33=lullvlCOS(U,V) 叉积公式:u x v = { u2v3-v2u3 ,u3v1-v3u1 ,u1v2-u2v1 } 这里点乘就是把两个向量中的对应元素相乘后再进行相加,其结果是一个数,在物理上可以用来计算物体在力F的作用下移动位移后所做的功,在几何中可以用来计算两个矢量的夹角,尤其是可以用来证明是否垂直。 用numpy来计算这个矢量的点积就非常方便,例如:
import numpy as np
a = np.array([10, 20, 30, 40])
print("a:", a)
b = np.array([1, 2, 3, 4])
print("b:", b)
c = np.dot(a, b)
print("c=a * b:", c)
这个例子中矢量的点积就是:(10, 20, 30, 40) * (1, 2, 3, 4)=101 + 202 + 30 * 3 + 40* 4=300 输出结果为:
a: [10 20 30 40]
b: [1 2 3 4]
c=a * b: 300
对于叉积,这里有一个数学上的例子:
对应的numpy实现方式为:
import numpy as np
a = np.array([[1, 2, 3],
[4, 5, 6]])
print("a:")
print(a)
b = np.array([[1, 4],
[2, 5],
[3, 6]])
print("b:")
print(b)
c = np.dot(a, b)
print("c=a x b:")
print(c)
输出为:
a:
[[1 2 3]
[4 5 6]]
b:
[[1 4]
[2 5]
[3 6]]
c=a x b:
[[14 32]
[32 77]]
我们可以发现,numpy中可以用np.dot()函数来同时处理点积和叉积的运算。当输入部分是两个一维数组时,np.dot()就是点积操作,当输入部分是两个二维数组时,进行的就是叉积操作。 其实,点积和叉积的运算规则基本类似的,都是把某批元素同另一批元素进行相乘并求和,这也就是为何numpy可以用dot函数来实现点积和叉积。
数组的n次方
python中的n次方表达为a**n,比如2的10次方:
print(2**10)
输出为:
1024
同理,在numpy数组中,也可以用**n的方式对数组中的每个元素进行n次方的操作,例如:
import numpy as np
a = np.array([1, 2, 3, 4])
print("a=", a)
b = a ** 2
print("b = a ** 2=", b)
输出为:
a= [1 2 3 4]
b = a ** 2= [ 1 4 9 16]
数组中的三角函数计算
直接上例子:
import numpy as np
a = np.array([1, 2, 3, 4])
print("a=", a)
b = np.sin(a)
print("b = sin(a)=", b)
输出为:
a= [1 2 3 4]
b = sin(a)= [ 0.84147098 0.90929743 0.14112001 -0.7568025 ]
看到这里,我们大体也能知道numpy中数组的运算方式大体都是对数组中的每个元素进行相同的数学运算,从而达到批量处理的效果。
数组同数值比较
直接上例子:
import numpy as np
a = np.array([1, 2, 3, 4, 5])
print(a<3)
输出为:
[ True True False False False]
其运算结果相当于把数组中每个元素同相应的数进行比较,结果数组中的元素就返回True或False。
生成随机数
import numpy as np
a = np.random.random((3, 2))
print(a)
b = np.random.rand(3, 2)
print(b)
输出0-1之间的随机数:
[[ 0.55981126 0.39507502]
[ 0.49826522 0.64111042]
[ 0.25806207 0.78056224]]
[[ 0.36580962 0.48456239]
[ 0.55941715 0.5660371 ]
[ 0.13974611 0.97547935]]
矩阵求和、最小、最大值
import numpy as np
a = np.array([1, 2, 3, 4, 5])
print("a=", a)
print("sum=", np.sum(a))
print("min=", np.min(a))
print("max=", np.max(a))
输出结果:
a= [1 2 3 4 5]
sum= 15
min= 1
max= 5
对于二维矩阵,我们也可以通过制定求和的轴来指定到底是按行求和还是按列求和。 其中axis=0为按列求和,axis=1为按行求和。例如:
import numpy as np
a = np.array([[5, 10, 15],
[20, 25, 30]])
print("a=")
print(a)
# 列求和
print("axis=0(列求和):", a.sum(axis=0))
# 行求和
print("axis=1(行求和):", a.sum(axis=1))
输出结果:
a=
[[ 5 10 15]
[20 25 30]]
axis=0(列求和): [25 35 45]
axis=1(行求和): [30 75]
对于求最小值和最大值也有同样的axis参数,表示到底是在行中求最小(大)值还是列中求最小(大)值。
发表评论
-
Oracle的where条件in/not in中包含NULL时的处理
2018-01-15 13:15 1579创建一个测试表t_inlinuxidc@TEST> ... -
在sae中设置django,让sae的工作环境跟本地python环境一致
2018-01-15 13:15 425sae中安装有python环境,想让sae导入自己下载的d ... -
win10下Django工程的创建
2018-01-11 13:39 370一、配置环境 win ... -
MySQL 5.7.18 zip文件安装教程
2018-01-11 13:47 516MySQL 5.7.18 zip 文件安装教程 安装 ... -
win10下Django工程的创建
2018-01-11 13:34 588一、配置环境 win10、python3.6、p ... -
MySql数据库逻辑架构讲解
2018-01-11 13:44 627与其他数据库相比,My ... -
Python使用虚拟环境
2018-01-11 13:44 439这里想象一下需 ... -
Kivy 中文教程 实例入门 简易画板 (Simple Paint App):1. 自定义窗口部件 (widget)
2018-01-05 10:01 8871. 框架代码 用 PyCharm 新建一个名为 S ... -
Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 2. 变量
2018-01-05 10:01 1137大家在中学就已经学过变量的概念了。例如:我们令 x = 1 ... -
面向对象1
2018-01-05 09:49 456面向对象概念 面向对象是利用类和对象来创建各种模型对 ... -
Python列表及元组操作
2018-01-05 09:49 562#列表(一组有序 ... -
Python的hasattr() getattr() setattr() 函数使用方法详解
2018-01-05 09:57 719hasattr(object, name)判断一个对象里面 ... -
利用DBUTILS获得刚插入自增id记录的id信息的方法及代码
2018-01-02 12:36 2065我在做两个需要关联的表的时候,第二张表需要知道第一张表的i ... -
win10如何打开sqlserver配置管理器
2018-01-02 12:24 1059win10如何打开sqlserver配置管理器,windo ... -
数据库查询语言DQL使用介绍
2018-01-02 12:24 511(1)C++ppentry.C++om/list.php? ... -
Redis Basic在CentOS下安装指令
2018-01-02 12:23 496安装 C++entOS下安装指令: wge ... -
SpringBoot整合PageHelper实现数据库分页的代码教程
2018-01-02 12:23 747最近学习了SpringBoot 由于需要数据库分页功能 再 ... -
Day01_计算机硬件及启动流程
2017-12-26 17:23 551一.计算机硬件介绍 概念:由一条总线把CPU、内存和 ... -
python+Eclipse+pydev环境搭建
2017-12-26 17:12 399本文重点介绍使用Eclipse+pydev插件来写Pyth ... -
Python学习一:序列基础详解
2017-12-26 17:20 432作者:NiceCui 本文谢绝转载,如需转载需征得作 ...
相关推荐
该资源为numpy-2.0.0-cp39-cp39-win_amd64.whl,欢迎下载使用哦!
该资源为numpy-2.1.1-cp313-cp313-win_amd64.whl,欢迎下载使用哦!
"numpy-1.9.1-win32-superpack-python2.7"是Python 2.7用户在32位Windows系统上进行科学计算的得力工具,它不仅提供了高效的数组处理能力,还带来了丰富的数学函数和强大的数据分析功能,为科研和工程领域的Python...
该资源为numpy-2.0.0-cp310-cp310-win_amd64.whl,欢迎下载使用哦!
该资源为numpy-2.0.0-cp312-cp312-win_amd64.whl,欢迎下载使用哦!
numpy-user-1.16.1.pdf则是针对初学者的指南,涵盖了numpy的基础知识和常见用法。它将帮助我们理解如何使用numpy进行数据预处理、数据清洗,以及如何与其他Python库(如pandas和matplotlib)集成。其中,可能会介绍...
numpy-2.1.1-cp312-cp312-win_amd64.whl
来自官网的,支持python3 (3.6)的numpy版本。有时候网速太慢,在这里共享下。 ----- pip install numpy Collecting numpy Downloading ...numpy-1.18.0-cp36-cp36m-manylinux1_x86_64
**Python库numpy-1.18.5-cp38-cp38-manylinux1_x86_64.whl详解** 在Python编程环境中,`numpy`是一个不可或缺的库,尤其对于处理数值计算和科学计算任务。这个压缩包文件"numpy-1.18.5-cp38-cp38-manylinux1_x86_64...
该资源为numpy-2.1.0-cp310-cp310-win_amd64.whl,欢迎下载使用哦!
numpy-2.1.1-cp310-cp310-win_amd64.whl
numpy-1.20.2-cp39-cp39-win_amd64.whl 官网太难下了,分享一下。
该资源为numpy-1.26.1-cp39-cp39-win_amd64.whl,欢迎下载使用哦!
该资源为numpy-2.0.0-cp312-cp312-win32.whl,欢迎下载使用哦!
该资源为numpy-2.1.0-cp312-cp312-win_amd64.whl,欢迎下载使用哦!
numpy-2.1.1-cp312-cp312-win-amd64.whl
该资源为numpy-2.0.0-cp311-cp311-win_amd64.whl,欢迎下载使用哦!
numpy-2.1.1-cp311-cp311-win-amd64.whl
numpy-2.1.1-cp310-cp310-win-amd64.whl
该资源为numpy-1.26.1-cp310-cp310-win_amd64.whl,欢迎下载使用哦!