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如何避免文件同名产生覆盖,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • 局域网内python socket实现windows与linux间的消息传送

    局域网内python socket实现windows与linux间的消息传送

    这篇文章主要介绍了局域网内python socket实现windows与linux间的消息传送的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • urllib和BeautifulSoup爬取维基百科的词条简单实例

    urllib和BeautifulSoup爬取维基百科的词条简单实例

    这篇文章主要介绍了urllib和BeautifulSoup爬取维基百科的词条简单实例,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Opencv实现抠图背景图替换功能

    Opencv实现抠图背景图替换功能

    这篇文章主要为大家详细介绍了Opencv实现抠图替换背景图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • Python使用unicodedata实现字符串标准化

    Python使用unicodedata实现字符串标准化

    这篇文章主要来和大家聊一聊 Python 的一个内置模块:unicodedata,它是专门用来处理 unicode 字符串的,下面就一起来看看它的用法吧
    2023-06-06
  • Python的语法基础你真的了解吗

    Python的语法基础你真的了解吗

    这篇文章主要为大家详细介绍了Python的语法基础,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • Django零基础入门之运行Django版的hello world

    Django零基础入门之运行Django版的hello world

    这篇文章主要介绍了Django零基础入门之运行Django版的hello world,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Python asyncio常用函数使用详解

    Python asyncio常用函数使用详解

    Asyncio在经过一段时间的发展以及获取Curio等第三方库的经验来提供更多的功能,目前高级功能也基本完善,但是相对于其他语言,Python的Asyncio高级功能还是不够的,但好在Asyncio的低级API也比较完善
    2023-03-03
  • 一文带你精通Python中exec函数的高级技巧

    一文带你精通Python中exec函数的高级技巧

    在 Python 中,exec 是一个内置函数,允许在运行时动态执行 Python 代码,本文将详细介绍 Python exec 函数的高级用法,包括动态代码生成、执行外部文件等内容,希望对大家有所帮助
    2023-11-11
  • python内置模块OS 实现SHELL端文件处理器

    python内置模块OS 实现SHELL端文件处理器

    这篇文章主要介绍了python内置模块OS实现SHELL端文件处理器,文章通过围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09

最新评论