之前几节主要学了了ndarray的创建,打印等,但是远远不够,学习numpy本质上是为了使我们算法能够快速实现得到验证,ndarray当然也支持常用的加、减、乘、除基本操作。

ndarray的加减乘除操作是按照数组中的像素进行操作,而不是进行矩阵的操作,本质上是产生一个新的数组并填充上计算的结果

加减法

加减法为元素之间的操作,即为元素的加减

使用范例:

import numpy as npa=np.array([20,30,40,50])
print('a:',a)
print("*********")
b = np.arange(4)
print('b:',b)
print("****a-b***")
c= a-b
print('a-b: ',c)
print("****a+b***")
d= a+b
print('a-b',d)
print("***a+1****")
g= a+1
print("a+1:" ,g)
print("***a-1****")
g= a-1
print("a-1:" ,g)

运行结果:

a: [20 30 40 50]
*********
b: [0 1 2 3]
****a-b***
a-b:  [20 29 38 47]
****a+b***
a-b [20 31 42 53]
***a+1****
a+1: [21 31 41 51]
***a-1****
a-1: [19 29 39 49]

由上述可知,两个数组的相加减,为元素之前的相加减,数组加减一个常数时,结果为每个元素都加减该常数

乘除法

乘除法和加减法一样都是元素之前乘除,而不是矩阵之间乘除

import numpy as npa=np.array([20,30,40,50])
print('a:',a)
print("*********")
b = np.arange(4)
print('b:',b)
print('*******b**2*****')
d= b**2
print('B**2', d)
print('*******a/2*****')
d= a/2
print('a/2', d)
print('*******a*b****')
d= a*b
print('a*b', d)
A = np.array( [[1,1],[0,1]] )
B = np.array( [[2,0],[3,4]] )
print("**********A****")
print("A:",A)
print("*********B*****")
print("B:", B)
print('***********A*B******')
print('A*B:', A*B)

运行结果:

a: [20 30 40 50]
*********
b: [0 1 2 3]
*******b**2*****
B**2 [0 1 4 9]
*******a/2*****
a/2 [10. 15. 20. 25.]
*******a*b****
a*b [  0  30  80 150]
**********A****
A: [[1 1][0 1]]
*********B*****
B: [[2 0][3 4]]
***********A*B******
A*B: [[2 0][0 4]]

+=,*=操作

+=,*=操作和上面的不一样的地方就是不会创建新的数组,而是之间在现有的数组上修改结果

import numpy as npa = np.ones((2,3), dtype=int)
b = np.random.random((2,3))
print("**********a****")
print('a:', a)
print("**********b****")
print('b:', b)
a *=3
print("**********a *=3****")
print("a:", a)
b +=a
print("**********b +=a****")
print("b:", b)a +=b
print("**********a +=b****")
print("a:", a)

运行结果:

**********a****
a: [[1 1 1][1 1 1]]
**********b****
b: [[0.19450385 0.89150473 0.52166219][0.34097668 0.32434198 0.96972165]]
**********a *=3****
a: [[3 3 3][3 3 3]]
**********b +=a****
b: [[3.19450385 3.89150473 3.52166219][3.34097668 3.32434198 3.96972165]]
Traceback (most recent call last):File ".\basic3.py", line 16, in <module>a +=b
numpy.core._exceptions.UFuncTypeError: Cannot cast ufunc 'add' output from dtype('float64') to dtype('int32') with casti
ng rule 'same_kind'

由上述结果,当运行到 a+=b时报错,那是因为b为浮点型,而a为整型,在python中不能将浮点型的结果存到整型中,因为a的精度不高,但是可以将整型复给浮点型,因为浮点型的精度高于整型

当两个精度不一致时,采用以精度较高的为标准

Sum 数组和

ndarray还支持计算整个数组的总和sum函数,其函数原型为:

numpy.sum(a, axis=None, dtype=None, out=None, keepdims=<no value>, initial=<no value>, where=<no value>)[source]

参数:

a:必选项,为要计算的数组或矩阵

axis:可选项, 所要计算的每轴的和,如果为负数,则计算从最后到开始的轴的集合,如果为一个元组,则计算元组中内的列表的轴的总和,默认为None,即计算所有的和

dtype:可选项,返回的数组和的数据类型,其中a中的数据类型为默认选项

out:可选项 输出的数组结果,必须是和a的维度一样

keepdim:可选项,如果该选项被设置,则轴被作为维度在结果的左边。

inital:可选项,sum的初始值,sun可以不从零开始,当设置后结果sum +=sun+inital

where:可选项 元素么包含在结果中

返回:

sum_along_axis: ndarray,

使用范例

1:计算一维数组所有元素的和:

import numpy as npa = np.arange(6)
print(a)
print("sum:", np.sum(a))

运行结果:

[0 1 2 3 4 5]
sum: 15

2:计算二维数组的所有元素的和

import numpy as npa = np.array([[1,2],[3,4]])
print(a)
print("sum:", np.sum(a))

运行结果:

[[1 2][3 4]]
sum: 10

3: axis=:0时计算所有列的和:

import numpy as npa = np.array([[1,2],[3,4]])
print(a)
print("sum:", np.sum(a, axis=0))

运行结果:

[[1 2][3 4]]
sum: [4 6]

4:axis=:1时计算所有行的和:

import numpy as npa = np.array([[1,2],[3,4]])
print(a)
print("sum:", np.sum(a, axis=1))

运行结果:

import numpy as npa = np.array([[1,2],[3,4]])
print(a)
print("sum:", np.sum(a, axis=1))

5:当精度过小时,将会出现数据溢出:

import numpy as npa = np.ones(128, dtype=np.int8)
print(a)
print("sum:", np.sum(a, dtype=np.int8))

运行结果:

[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
sum: -128

6:inital初始化值设置为5:

import numpy as npa = np.ones([10])
print(a)
print("sum:", np.sum(a, initial=5))

运行结果:

[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
sum: 15.0

Min数组最小值

除了使用sum计算数组和之外,还可以计算数组中最小值,函数原型:

ndarray.min(axis=None, out=None, keepdims=False, initial=<no value>, where=True)

其入参意义 和sum意义,不仅可以求整个数组的最小值,还可以按照行或列求最小值

使用范例

1:求整个数组最小值

import numpy as npa = np.array([[1,2,4],[3,4,6],[7,8,9]])
print(a)
print("min:", a.min())

运行结果:

[[1 2 4][3 4 6][7 8 9]]
min: 1

2:求每个列的最小值

import numpy as npa = np.array([[1,2,4],[3,4,6],[7,8,9]])
print(a)
print("min:", a.min(axis=0))

运行结果:

[[1 2 4][3 4 6][7 8 9]]
min: [1 2 4]

3:按照行求最小值

import numpy as npa = np.array([[1,2,4],[3,4,6],[7,8,9]])
print(a)
print("min:", a.min(axis=1))

运行结果:

[[1 2 4][3 4 6][7 8 9]]
min: [1 3 7]

Max求最大值

既然可以求最小值,那么就可以求最大值,其函数原型如下:

ndarray.max(axis=None, out=None, keepdims=False, initial=<no value>, where=True)

其参数意义和上述一致,即可以求总的最大值,又可以按照行或列求最大值

使用范例

1:求整个数组最大值:

import numpy as npa = np.array([[1,2,4],[3,4,6],[7,8,9]])
print(a)
print("min:", a.max())

运行结果:

[[1 2 4][3 4 6][7 8 9]]
min: 9

2:按照列求最大值:

import numpy as npa = np.array([[1,2,4],[3,4,6],[7,8,9]])
print(a)
print("min:", a.max(axis=0))

运行结果:

[[1 2 4][3 4 6][7 8 9]]
min: [7 8 9]

3:按照行求最大值:

import numpy as npa = np.array([[1,2,4],[3,4,6],[7,8,9]])
print(a)
print("min:", a.max(axis=1))

运行结果:

[[1 2 4][3 4 6][7 8 9]]
min: [4 6 9]

矩阵相乘

加减乘除的操作只是针对元素之间的操作,如果是矩阵之间做相乘操作,则需要使用dot函数,或者只@操作(python 3.5版本及以上支持),dot函数如下:

numpy.dot(a, b, out=None)
  • If both a and b are 1-D arrays, it is inner product of vectors (without complex conjugation).
  • If both a and b are 2-D arrays, it is matrix multiplication, but using matmul or a @ b is preferred.
  • If either a or b is 0-D (scalar), it is equivalent to multiply and using numpy.multiply(a, b) or a * b is preferred.
  • If a is an N-D array and b is a 1-D array, it is a sum product over the last axis of a and b.
  • If a is an N-D array and b is an M-D array (where M>=2), it is a sum product over the last axis of a and the second-to-last axis of b:

其计算公式:

dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])

使用范例:

1:@做矩阵相乘

import numpy as npA = np.array( [[1,1],[0,1]] )B = np.array( [[2,0],[3,4]] )
print("A: ", A)
print("B: ", B)
print("A @ B: ", A@B)

运行结果:

A:  [[1 1][0 1]]
B:  [[2 0][3 4]]
A @ B:  [[5 4][3 4]]

2:使用dot函数

import numpy as npA = np.array( [[1,1],[0,1]] )B = np.array( [[2,0],[3,4]] )C = A.dot(B)print("A: ", A)
print("B: ", B)
print("A dot B: ", C )

运行结果:

A:  [[1 1][0 1]]
B:  [[2 0][3 4]]
A dot B:  [[5 4][3 4]]

python numpy ndarray之basic operations相关推荐

  1. python numpy.ndarray中的数据转为int型

    首先了解内容与类型 >>>print(a)(array([[0.01124722],[0.21752586],[0.05586815],[0.03558792]]), array([ ...

  2. 利用Python中的numpy.ndarray.reshape()对阵列形状进行调整

    我们在进行阵列运算的时候,常常要根据需要调整阵列的形状,numpy库中的函数reshape()可以方便地实现对阵列形状进行调整. 其函数原型如下: dst = numpy.ndarray.reshap ...

  3. Python 保存数组至.mat文件,报错:AttributeError: 'numpy.ndarray' object has no attribute 'items'

    Python保存数组的方式有很多种,如savetxt,但这个函数只能保存一维或二维数组.为了保存高维数组,同时能够在matlab载入,可以使用scipy.io.savemat()函数,例子: impo ...

  4. [转载] python 调用自己的方法报错,numpy.ndarray object has no attribute brighten

    参考链接: Python中的numpy.eye 在使用python写美颜算法时,出现一个bug,AttributeError: 'numpy.ndarray' object has no attrib ...

  5. python数据分析 - numpy | ndarray数组 | numpy常用函数

    文章目录 数据分析 numpy概述 numpy历史 numpy的核心:多维数组 numpy基础 ndarray数组 内存中的ndarray对象 ndarray数组对象的特点 ndarray数组对象的创 ...

  6. python 随机选择list或numpy.ndarray中n个元素

    python 随机选择list或numpy.ndarray中n个元素 1. 从一个list中随机选取一个元素 random.choice(data) import random data = ['a' ...

  7. python如何调用c++numpy.ndarray代码_从C++到Numpy ndarray的转换非常简单

    我使用Boost Python来计算程序的计算密集型部分,它工作得很好,除了将数组从C++传递到Python,反之亦然也很慢,这是程序整体效率的限制因素.在 这里有一个例子来说明我的观点.在C++侧, ...

  8. python中如何将bytes格式转换为numpy ndarray

    python中如何将bytes格式转换为numpy ndarray python中如何将bytes格式转换为numpy ndarray

  9. python中ndarray是什么意思_什么是Numpy的ndarray

    首先,Numpy的核心是ndarray. 然后,ndarray本质是数组,其不同于一般的数组,或者Python 的list的地方在于它可以有N 维(dimentions),也可简单理解为数组里面嵌套数 ...

最新文章

  1. 基于php双引号中访问数组元素
  2. 关于赠书《VS Code》断货延迟的通知!
  3. 关于引用与指针实现多态的一些记录
  4. ArcEngine中IFeatureClass.Search(filter, Recycling)方法中Recycling参数的理解
  5. 单例模式 -- Java
  6. 类似QQ右上角选项弹框
  7. python数据统计 矢量图_用python中的矢量化解决方案计算max draw down
  8. 用html5做一个简单网页_用Python做一个简单的翻译工具
  9. leetcode 229. Majority Element II | 229. 求众数 II(找出现次数超过n/k的元素)
  10. bilstm+crf中文分词_基于LSTM的中文分词模型
  11. JVectorMap 实现中国地图
  12. 算法题5 用数组实现队列
  13. 服务器系统给U盘盘符,五大步骤解决U盘插入电脑盘符不显示问题
  14. python 魔兽世界钓鱼_有关魔兽世界怀旧服的钓鱼工具的一点思考
  15. bash 运行可执行文件hello 报错 No such file or directory
  16. OpenCASCADE:OCCT CSharp 示例
  17. 不懂这些法律问题,你的创业融资很危险
  18. Python项目之企业审批流绩效分析分析应用2
  19. 资产负债表 利润表 现金流量表
  20. 一个机器学习算法工程师的基本素质~

热门文章

  1. JavaScript捕获窗口关闭事件
  2. 数据源管理 | 关系型分库分表,列式库分布式计算
  3. 总结一些最优化算法(ADMM/FISTA)代码网站
  4. Linux多线程实践(5) --Posix信号量与互斥量解决生产者消费者问题
  5. Mac与centos的ip配置
  6. SqlServer动态表查询
  7. 诞生至今,大数据的真正含义到底是什么?
  8. MVVM 下 ContextMenu的命令绑定
  9. SpringCloud(第 054 篇)简单 Quartz-Cluster 微服务,采用注解配置 Quartz 分布式集群... 1
  10. Mock Server利器 - Moco