首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >numpy累积点积

numpy累积点积
EN

Stack Overflow用户
提问于 2019-12-26 11:09:19
回答 1查看 642关注 0票数 1

我有一个ndarray A,填充N个平方DxD矩阵(shape (N,D,D))。我想把它转换成一个形状相同的ndarray B,其中B=A和每一个i>0,Bi = np.dot(Bi-1,Ai)。虽然基本实现是显而易见的,但我想知道这个操作是否比for循环有更快的实现。

例如,让我描述另一种执行计算的方法:

  1. B0.N/2=计算A.AN/2-1基本方式
  2. BN/2.N=计算AN/2.a
  3. 返回np.concatenate((B0.N/2-1,np.dot(BN/2 .N))

重点是1和2可以并行完成,3是向量化操作,这种拆分可以根据需要对数组的每一半进一步应用。这让我怀疑是否存在比基本for循环更好的选项(例如,我建议的是实现/实际改进,还是另一个选项更好)。

非常感谢,

伊夫塔赫

编辑:用于大多数基本实现的代码,用于基准测试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np

def cumdot(A):
    B = np.empty(A.shape)
    B[0] = A[0]
    for i in range(1, A.shape[0]):  
        B[i] = B[i - 1] @ A[i]
    return B

Edit2:在numpy中,所有运行函数似乎都支持.accumulate() (这正是我所要做的),matmul (它的行为就像一个点积)是一个通用的ufunc。这意味着matmul不是从两个标量到一个矩阵的函数,而是从两个矩阵到一个矩阵的函数,因此当函数累积存在时,调用matmul将引发一个异常,说明累积不能在具有签名的ufuncs上调用。如果这件事能成功的话,我也很想知道。

EN

回答 1

Stack Overflow用户

发布于 2020-05-08 03:46:59

我不认为有一种完全矢量化的方法,只使用numpy函数(但我很高兴被证明是错误的!)

您可以通过使用itertools.accumulate来生成累积产品来隐藏循环。下面是一个例子。要创建A,我将使用使用scipy.stats.ortho_group生成的N随机正交矩阵来确保产品保持有界。

这里的前几行创建了形状(1000,4,4)的A

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [101]: from scipy.stats import ortho_group

In [102]: N = 1000

In [103]: D = 4

In [104]: A = ortho_group.rvs(D, size=N)

使用itertools.accumulate计算累积产品,并将结果放入一个numpy数组中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [105]: from itertools import accumulate

In [106]: B = np.array(list(accumulate(A, np.matmul)))   

验证我们从cumdot(A)获得了相同的结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [107]: def cumdot(A): 
     ...:     B = np.empty(A.shape) 
     ...:     B[0] = A[0] 
     ...:     for i in range(1, A.shape[0]):   
     ...:         B[i] = B[i - 1] @ A[i] 
     ...:     return B 
     ...:                                                                                         

In [108]: B0 = cumdot(A)                                                                          

In [109]: (B == B0).all()                                                                         
Out[109]: True

检查一下表演。事实证明,使用itertools.accumulate的速度略快一些。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [110]: %timeit B0 = cumdot(A)
2.89 ms ± 31.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [111]: %timeit B = np.array(list(accumulate(A, np.matmul)))
2.44 ms ± 33.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59492474

复制
相关文章
点积与叉积
如果a和b都是单位向量,那么点积的结果就是其夹角的cos值。
全栈程序员站长
2022/11/17
1.2K0
点积与叉积
09:向量点积计算
09:向量点积计算 总时间限制: 1000ms 内存限制: 65536kB描述 在线性代数、计算几何中,向量点积是一种十分重要的运算。 给定两个n维向量a=(a1,a2,...,an)和b=(b1,b2,...,bn),求点积a·b=a1b1+a2b2+...+anbn。 输入第一行是一个整数n。1 <= n <= 1000。 第二行包含n个整数a1,a2,...,an。 第三行包含n个整数b1,b2,...,bn。 相邻整数之间用单个空格隔开。每个整数的绝对值都不超过1000。输出一个整数,即两个向
attack
2018/04/03
1.8K0
朝花夕拾之Matlab基础回顾:向量的点积、叉积、混合积
1. 向量的点积运算 两个向量的点积等于一个向量的模与另一个向量在这个向量方向上的投影的乘积。 clear; x1=[1 2 3 4,5]; x2=[6 7 8 9 10]; %两向量维度必须一致 y=dot(x1,x2); %130 2. 向量的叉积运算 两个向量的交点,并与此两向量所在的平面垂直的向量。 x1=[1 2 3]; x2=[4 5 6]; %两向量维度必须一致,运算结果满足右手定则 y1=cross(x1,x2) % -3 6 -3 3. 向量的混合运算 它的绝对值表示以向量为棱的
glm233
2020/09/28
1.2K0
向量空间相关概念总结-点积
余玄定理 这是一个高中知识,证明过程直接百度百科吧,直接发结论: 夹角如果是90°的时候就是勾股定理了 向量中的余玄定理: 定理 向量的长度 上面余玄定理中坐标点好说,一般都是已知量,那向量的长
坑吭吭
2018/10/10
7410
向量空间相关概念总结-点积
线性代数的本质课程笔记(中)-点积和叉积
1、点积 视频地址:https://www.bilibili.com/video/av6299284?from=search&seid=12903800853888635103 点积的标准观点 如果我
石晓文
2019/09/03
1.6K0
线性代数的本质课程笔记(中)-点积和叉积
shell累积1
创建多个目录 mkdir {a,b,c,d} 将一个文件copy到当前目录下所有目录内 find . -type d -exec cp Makefile {} \; 替换当前目录下所有的Makefile里面的TARGET为target find . -name Makefile -exec sed -i s/TARGET/target/g {} \; 查看一下当前目录下的所有的Makefile里面的内容 find . -name Makefile -print -exec cat {} \; ./b/Ma
用户3765803
2019/03/05
3440
Numpy基础知识点汇总
1)ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。
用户1332428
2023/03/28
7230
Numpy基础知识点汇总
Numpy基础知识点汇总
1、概述 Numpy是高性能科学计算和数据分析的基础包,它的部分功能如下: 1)ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。 2)对整组数据进行快速运算的标准数学函数 3)用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 2、ndarray的创建 这一节,我们主要关注ndarray数组的创建,我们主要有以下几种方式: 数组转换 创建数组的最简单的方法就是使用array函数,将Python下的list转换为ndarray。 #通过数组创建一个ndarray data1
石晓文
2018/04/11
1.5K0
ECCV 2022 | 基于点云累积的动态三维场景分析
标题:Dynamic 3D Scene Analysis by Point Cloud Accumulation
一点人工一点智能
2023/01/15
1.4K0
ECCV 2022 | 基于点云累积的动态三维场景分析
学习累积流图
累积流图(CFD: Cumulative Flow Diagram)是一种很有效地度量分析方法,可以很好地反映工作项在每个流程节点的流动情况,观察到不同角色在交付过程中相互协作的情况,并可以很容易地分析出研发过程各个阶段在制品、交付周期、交付效率随时间变化的趋势。
CKL的思考
2023/08/28
3670
学习累积流图
【转】Numpy 数学函数及代数运算
如果你使用 Python 语言进行科学计算,那么一定会接触到 Numpy。Numpy 是支持 Python 语言的数值计算扩充库,其拥有强大的高维度数组处理与矩阵运算能力。除此之外,Numpy 还内建了大量的函数,方便你快速构建数学模型。
用户7886150
2021/01/05
1.1K0
Numpy 使用教程--Numpy 数学函数及代数运算
如果你使用 Python 语言进行科学计算,那么一定会接触到 Numpy。Numpy 是支持 Python 语言的数值计算扩充库,其拥有强大的高维度数组处理与矩阵运算能力。除此之外,Numpy 还内建了大量的函数,方便你快速构建数学模型。
用户7886150
2021/01/06
1.7K0
PyTorch中的梯度累积
我们在训练神经网络的时候,超参数batch_size的大小会对模型最终效果产生很大的影响,通常的经验是,batch_size越小效果越差;batch_size越大模型越稳定。理想很丰满,现实很骨感,很多时候不是你想增大batch_size就能增大的,受限于显存大小等因素,我们的batch_size往往只能设置为2或4,否则就会出现"CUDA OUT OF MEMORY"(OOM)报错。如何在有限的计算资源下,采用更大的batch_size进行训练,或者达到和大batch_size一样的效果?这就是梯度累加(Gradient Accumulation)技术了
mathor
2021/07/28
1.5K0
numPy的一些知识点
numpy 早就用过了,但是长时间不用的话对其中的一些知识点又会忘记,又要去网上翻看各种博客,干脆自己把常用的一些东西记下来好了,以后忘了的话直接看自己写的笔记就行了
棒棒鸡不棒
2022/09/01
9520
numPy的一些知识点
python及numpy,pandas易混淆的点
初接触python觉得及其友好(类似matlab),尤其是一些令人拍案叫绝不可思议的简单命令就可以完成非常复杂的计算,但是真正接触一下就发现,python比matlab有很多不一样的特性。 首先python的工具包(类似于C的库函数)非常多,很多功能都有重复,所以选好包很重要,最简单的选择方法就是用时下最流行的包,社区比较活跃,遇到问题网上一搜很多答案,而且更新和维护也比较好。 在数值计算中常用的包就是numpy,pandas,scipy以及绘图用的matplotlib。 Numpy numpy的优势是矩阵
用户1332428
2018/03/09
1.9K0
python及numpy,pandas易混淆的点
初接触python觉得及其友好(类似matlab),尤其是一些令人拍案叫绝不可思议的简单命令就可以完成非常复杂的计算,但是真正接触一下就发现,python比matlab有很多不一样的特性。 首先python的工具包(类似于C的库函数)非常多,很多功能都有重复,所以选好包很重要,最简单的选择方法就是用时下最流行的包,社区比较活跃,遇到问题网上一搜很多答案,而且更新和维护也比较好。 在数值计算中常用的包就是numpy,pandas,scipy以及绘图用的matplotlib。 Numpy numpy的优
企鹅号小编
2018/01/25
2K0
动态规划基础题(第4题): 此累积和非累积和
Input is given from Standard Input in the following format:
小码匠
2022/06/16
5980
动态规划基础题(第4题): 此累积和非累积和
Python中的Numpy(4.矩阵操作(算数运算,矩阵积,广播机制))
n1 = np.random.randint(0, 10, size=(4, 5))
用户7886150
2021/01/07
9420
机器学习数学基础:点积和欧几里得空间
容易验证,这个内积的形式也符合内积的公理,所以就构成了一个内积空间。这个内积空间,也就是我们常说的欧几里得空间(简称:欧氏空间,Euclidean space)。
老齐
2022/05/17
7040
机器学习数学基础:点积和欧几里得空间
累积柱状图加误差棒
最近做实验太累,感觉没有特别多的时间好好读文献了。可能这一段时间更新的会比较慢。今天先来点轻松地~
Listenlii-生物信息知识分享
2020/05/28
1.6K0

相似问题

Numpy点积

11

numpy点积和矩阵积

27

Numpy点积问题

32

Numpy数组点积

224

Numpy元素点积

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文