python之broadcast和numpy.sum()函数用法及说明

 更新时间:2023年06月14日 09:43:23   作者:ImposterSyndrome  
这篇文章主要介绍了python之broadcast和numpy.sum()函数用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

python broadcast和numpy.sum()函数

import numpy as np
a = np.random.random_sample((3,1,3))
b  = np.random.random_sample((2,3))
c = a-b
c = np.square(c)
c = np.sum(c,axis=2)
c= np.sqrt(c)
a1 = a[1,:,:]
b1 = b[1,:]
print(a1,'5')
print(b1,'6')
print(np.square(a1-b1).shape)
print(np.sum(np.square(a1-b1),axis=1),'7')
print(np.sqrt(np.sum(np.square(a1-b1),axis=1)))

python 的broadcast机制,适用于当两个array的形状不一样时,可以通过broadcast进行自动的补齐,从而可以减少使用循环所带来的代码量以及提高效率。

它的补齐规则如下:

1.如果两个数组数据维度相同,如(3,1,2)与(1,2,2),且其中某个维度的rank是1,那么会将rank低的数据进行复制,直到两个数组的维度以及rank均相同

2.如果两个数组的维度不同,如(3,1,2)与(2,2),那么维度低的数组会加一,直到其维度与高维度的相匹配,加一的条件在于(1,2)与(2,2)可以进行broadcast,与情况一相同

numpy.sum()

  • sum()函数参数为numpy.sum(a, axis = )
  • axis代表相加的轴,初始从0开始
  • axis = i,则代表从维度i进行累加,其他维度不变

a.shape = (1,2,3,4)

numpy.sum(a,axis = 0).shape = (2,3,4)
numpy .sum(a, axis =1).shape = (1,3,4)

numpy-numpy.sum()中‘keepdims‘参数的作用

在numpy的许多函数中,会出现'keepdims'参数,以numpy.sum()为例:

官方文档中给出的解释:

numpy.sum(a, axis=None, dtype=None, out=None, keepdims=<no value>, initial=<no value>, where=<no value>)
'''
keepdimsbool, optional
If this is set to True, the axes which are reduced are left in the result as dimensions with size one. With this option, the result will broadcast correctly against the input array.
If the default value is passed, then keepdims will not be passed through to the sum method of sub-classes of ndarray, however any non-default value will be. If the sub-class' method does not implement keepdims any exceptions will be raised.
'''

看的一脸懵,还是跑个代码来得实在:

a = np.array([[0, 0, 0],
       [0, 1, 0],
       [0, 2, 0],
       [1, 0, 0],
       [1, 1, 0]])
print(a)
'''
输出:
[[0 0 0]
 [0 1 0]
 [0 2 0]
 [1 0 0]
 [1 1 0]]
'''
a_sum_true = np.sum(a, keepdims=True)
print(a_sum_true)
print(a_sum_true.shape)
a_sum_false = np.sum(a, keepdims=False)
print(a_sum_false)
print(a_sum_false.shape)
'''
输出:
[[6]]
(1, 1)
6
()
'''
a_sum_axis1_true = np.sum(a, axis=1, keepdims=True)
print(a_sum_axis1_true)
print(a_sum_axis1_true.shape)
a_sum_axis1_false = np.sum(a, axis=1, keepdims=False)
print(a_sum_axis1_false)
print(a_sum_axis1_false.shape)
'''
输出:
[[0]
 [1]
 [2]
 [1]
 [2]]
(5, 1)
[0 1 2 1 2]
(5,)
'''
a_sum_axis0_true = np.sum(a, axis=0, keepdims=True)
print(a_sum_axis0_true)
print(a_sum_axis0_true.shape)
a_sum_axis0_false = np.sum(a, axis=0, keepdims=False)
print(a_sum_axis0_false)
print(a_sum_axis0_false.shape)
'''
输出:
[[2 4 0]]
(1, 3)
[2 4 0]
(3,)
'''

如果并不指定'axis'参数,输出的结果是相同的,区别在于当' keepdims = True'时,输出的是2D结果。

如果指定'axis'参数,输出的结果也是相同的,区别在于'keepdims = True'时,输出的是2D结果。

可以理解为'keepdims = True'参数是为了保持结果的维度与原始array相同。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python 实操显示数据图表并固定时间长度

    Python 实操显示数据图表并固定时间长度

    这篇文章主要介绍了Python 实操显示数据图表并固定时间长度,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Python 爬虫的原理

    Python 爬虫的原理

    这篇文章主要介绍了Python 爬虫的原理,文中讲解非常细致,帮助大家更好的学习和认识爬虫,感兴趣的朋友可以了解下
    2020-07-07
  • python 字典的打印实现

    python 字典的打印实现

    这篇文章主要介绍了python 字典的打印实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Python CategoricalDtype自定义排序实现原理解析

    Python CategoricalDtype自定义排序实现原理解析

    这篇文章主要介绍了Python CategoricalDtype自定义排序实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 浅析NumPy 切片和索引

    浅析NumPy 切片和索引

    这篇文章主要介绍了NumPy 切片和索引的相关资料,帮助大家更好的理解和学习NumPy的相关知识,感兴趣的朋友可以了解下。
    2020-09-09
  • 深入解答关于Python的11道基本面试题

    深入解答关于Python的11道基本面试题

    这篇文章主要介绍了关于Python的11道基本面试题,其中单引号,双引号,三引号的区别、Python的参数传递是值传递还是引用传递以及什么是lambda函数?它有什么好处?等一系列的基础面试题,文中给出了详细的解答,需要的朋友可以参考学习。
    2017-04-04
  • 浅谈pandas dataframe对除数是零的处理

    浅谈pandas dataframe对除数是零的处理

    这篇文章主要介绍了浅谈pandas dataframe对除数是零的处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 深入理解 python 虚拟机

    深入理解 python 虚拟机

    这篇文章主要介绍了深入理解 python 虚拟机的相关资料,需要的朋友可以参考下
    2023-04-04
  • Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)

    Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)

    Python是一种跨平台的计算机程序设计语言,它可以运行在Windows、Mac和各种Linux/Unix系统上。这篇文章主要介绍了Python+Selenium+phantomjs实现网页模拟登录和截图功能,需要的朋友可以参考下
    2019-12-12
  • python中pathlib模块的基本用法与总结

    python中pathlib模块的基本用法与总结

    这篇文章主要给大家介绍了关于python中pathlib模块的基本用法与总结的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-08-08

最新评论