np.dot 浮点类型运算远快于整型运算

【效率优化专题】3.java浮点数运算和整数型运算的效率比较 3.java浮点数运算和整数型运算的效率比较目录1 浮点数运算效率误区的产生原因2 浮点数运算和整型运算效率对比1 浮点数运算效率误区的产生原因部分程序员对应浮点数(float,double)做运算的时候,会有一个误区就是浮点数运算效率比整型运算效率低很多。产生这个认识的原因是因为以人的角度来考虑这个问题,做小数除法要比做整数除法麻烦一些而得出的。通过实际代码来比较一下这差异。2 浮点数运算和整型... 阅读详情

太长不看版:

ndarray变量内元素类型(dtype)为整型可能会导致运算速度变慢非常多,请注意这一点并保持矩阵运算的两变量内元素类型一致。



我有两个ndarray变量: Spike_train (shape of (492, 21474)), N (shape of (21474, 144)), 要对两者作矩阵乘法运算,调用numpy.dot函数,发现非常非常慢:

import numpy as np

np.dot(Spikes_train, N)

这个函数理论上矩阵计算速度是极快的,但是我发现当我进行一下运算时,竟然平均花费13秒~18秒的时间。令人费解。

起初以为传闻不一定对,以为是矩阵过大而导致的。于是进行模拟验证:

import numpy as np
A = np.random.uniform(0,120,(492, 21474))
B = np.random.uniform(0,120,(21474, 144))
C = np.dot(A,B)

print(type(A),type(B))
print(A.shape,B.shape,C.shape)
print(type(A),type(B),type(C))
print(A.dtype,B.dtype,C.dtype)

得到如下结果:

 而且浮点型运算速度非常快!np.dot()果然名不虚传。可见我之前调用太慢不是shape的问题。

于是我查看了 Spikes_train, N 的元素类型(dtype)以及变量类型,发现了问题所在:

 两个变量中元素类型虽然都是整数,但类型竟然不一样。于是进行变量的类型转换。

 虽然比此前要好一些,但仍然非常慢,需要7秒左右时间。

于是将变量类型转化为浮点型。

 一瞬间就除了结果,可见如同此前模拟数据一样采用的是浮点型运算会快很多。

 

[呱经验]浮点数乘法和整形乘除法效率比较 [呱经验]浮点数乘法和整形除法效率比较前言 前言 最近在做一个比赛,包含了如下内容: …… …… …… 环上边的转账金额需要为前一条边的转账金额的90%-110%(含边界)。 对于“金额”的处理,我一开始以浮点数乘法(乘1.1和0.9)外加eps修正精度的方式进行判断,有一位朋友看完我的代码后提出意见: C*S: 如果确定只有两位小数且不炸范围,那么有办法完全消除浮点数的使用。 ... 阅读详情

相关推荐

np.dot()函数的用法详解

基本简介 dot函数为numpy库下的一个函数,主要用于矩阵的乘法运算,其中包括:向量内积、多维矩阵乘法和矩阵与向量的乘法。 1. 向量内积 向量其实是一维的矩阵,两个向量进行内积运算时,需要保证两个向量包含的元素个数是相同的。 例1: import numpy as np x = np.array([1, 2, 3, 4, 5, 6, 7]) y = np.array([2, 3, 4, 5, 6, 7, 8]) result = np.dot(x, y) print(result) 输出结果: 168 计算过程就是将向量中对应元素相乘,再相加所得。即普通的向量乘法运算。 2.

Numpy 的dot方法使用float比int快,记录笔记

另外,BLAS API只包含矩阵和矩阵,矩阵和向量以及向量和向量的乘法。因此,更高维的数组乘法并不能被加速。在data_train['value']赋予dataframe和赋值数字,会在jaccard()运算过程中有巨大的差异,前者cpu运行占比较高,内存占用变化明显80w条数据十多二十秒就搞定了,而后者会cpu运行占比低,内存拉高比较慢,速度明显慢。问题出在np.dot上,因为慢的赋值是整数,而且快的是非整数浮点类型,所以有可能是数据格式的问题。Numpy 中似乎有针对 浮点数的优化点运算。

weixin_52810349的博客 361

Vue3实战:从零构建ElementPlus后台管理系统全流程

本文详细介绍了从零开始使用Vue3和ElementPlus构建后台管理系统的全流程。内容涵盖环境准备、项目初始化、Vite配置、SCSS样式体系搭建、ElementPlus组件库引入与配置,以及封装可复用的SvgIcon组件进行图标管理,旨在帮助开发者快速搭建现代化、可维护的中后台应用。

weixin_29011239的博客 158

运筹系列58:python使用numba进行加速

jitclass import numpy as np from numba import int32, float32 # import the types from numba.experimental import jitclass spec = [ ('value', int32), # a simple scalar field ('array', float32[:]), # an array field ] @jitcla

kittyzc的博客 3505

安装破解IAR EWARM 8.2,提供注册机

IAR Embedded Workbench for ARM(IAR for ARM)是一款微处理器的集成开发环境软件,该集成开发环境中包含了IAR的C/C++编译器、 汇编工具、链接器、库管理器、文本编辑器、工程管理器和C-SPY调试器,支持ARM,AVR,MSP430等芯片。   一、安装 双击运行安装程序,点击Install IAR Embedded Workbench for ARM...

睿思派克 4万+

全球第一开源云ERP Odoo操作手册 模块安装和界面汉化指南

Odoo 的功能包含在不同的模块中, 刚创建的数据库除 Odoo 的核心模块外, 其它模块并没有被安装到系统中,你可以根据需要安装它们。本节将介绍安装模块和界面汉化的相关知识。

weixin_44793763的博客 2072

Python Numpy的一些操作可以极大的加快你的code运行速度

So,想让你的code运行速度大大滴加快么?快使用Numpy自带的一些函数把!

zhangxinyu11021130的博客 1万+

Ardupilot环境搭建

Ardpilot介绍:ArduPilot通过多种传感器的数据(GPS、加速度计、气压计、磁场计)等来估计飞行器的姿态,从而使飞行器能够保持稳定。

weixin_62387234的博客 2633

Python numpy函数:dot()用法(简单直观)

线性代数中矩阵相乘,被称为点积运算(Dot Product),又称为内积。首先根据线性代数的知识,特别需要注意的一点是: 矩阵X1和矩阵X2进行点积运算,其中X1 和 X2 对应的维度(通俗点说,第一个矩阵的列数,和第二个矩阵的行数要相等)的元素个数必须保持一致,计算过程见下图 在numpy中点积运算,用np.dot表示,其一般格式为: numpy.dot(a , b , out = None) X1 = np.array([[1,2], [3,4]]) X2 = np.array([[5, 6, 7],

KUNPLAYBOY的博客 4180

基于STM32L4XX 、HAL库的TMC2209-LA-T步进电机驱动器驱动程序应用设计

/ R/W=0 表示写。uint32_t gconf_value = (0 << 0) // I_scale_analog: 禁用,使用UART控制电流。uint32_t ihold_irun = (8 << 0) // 保持电流 8/31 最大值。

PP_Cottage的博客 448

【Unity】NGUI下载与导入

Unity3D插件NGUI的下载和导入。

Get your hands dirty 3万+

Numpy总结

文章主要通过案例来理解广播机制、结合相应函数(rollaxis、swapaxes)来理解Axis、总结了相关函数axis=1的操作规律。

星航夜空的帆舟 700

把 SAP BTP Destination 写进 MTA:一段 com.sap.application.content 配置背后的部署编排学

MTA内容模块解析:SAP BTP中的声明式部署机制 本文详细解析了mta.yaml中com.sap.application.content模块在SAP BTP云环境中的作用。该模块通过声明式配置实现内容投递,无需编译或部署代码。核心功能包括: Destination创建:通过content-target:true标识将配置投递到Destination服务 HTML5应用部署:将静态资源投递到HTML5 Application Repository 安全集成:配置XSUAA服务实现OAuth2用户令牌交换

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 163

Python — Numpy 模块及常用函数

Python Numpy 模块 常用函数 1. numpy.ndarray 数组的基本命令创建数组数组的属性数组的数据类型数组的变形创建有规律的数组用 numpy.random 的随机函数创建随机数的数组数组的比较运算和逻辑运算数组的访问2. 数组的运算算术运算多维数组运算常用函数多维数组统计运算函数矩阵运算数组的排序 1. numpy.ndarray 数组的基本命令 创建数组 numpy.array( object, dtype=None, ndmin=0 )

Charles Leclerc's blog 1750

第 9 篇:TMC2240 速度调节实战|STEP 信号生成 + 平滑调速算法(无抖动)

摘要:本文详细介绍了TMC2240电机调速方案,重点解决调速时电机抖动、丢步等问题。核心原理是通过STEP信号频率控制转速,结合平滑加减速算法避免电流冲击。文章从速度与STEP频率的数学关系入手,提供了定时器生成固定频率STEP信号的实现代码,并给出不同转速下的频率参数表。针对42步进电机+256微步细分场景,详细讲解了定时器初始化、中断处理及固定转速设置方法,帮助开发者实现稳定调速。全文包含可直接复用的代码片段,适合嵌入式开发者快速实现电机平滑调速功能。

BackCatK Chen的博客 1033

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

运算符速度比较

文章目录 参考这位大佬的文章 上面大佬的总结, 涨知识了 结论 通用规则: 整数和(和AND/ OR/ XOR)与乘积花费的时间相同,除法(和取模)的速度慢三倍。 浮点数的乘积比求和的乘积慢两倍,除法的乘积甚至更慢。 在相同数据大小下,浮点运算始终比整数运算慢。 越小越快。 64位整数精度确实很慢。 浮点数32位总和比64位快,但在乘积和除法上却不是。 80和128位精度仅在绝对必要时才应使用,它们非常慢。 特别案例: 在x86-64 AVX上,浮点乘积在64位数据上比在32位上更快。 在POWER8

忘眠的博客 3514

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

python矩阵运算dot_矩阵、张量乘法(numpy.tensordot)的时间复杂度分析

两个大小都是\(N \times N\)的矩阵相乘,如果使用naive的算法,时间复杂度应该是\(\mathcal{O}(N^3)\),如果使用一些高级的算法,可以使幂指数降到3以下。对于一般情况的矩阵乘法,特别是张量乘法(numpy中的tensordot函数),时间复杂度又如何呢?二维矩阵乘法首先规定一下记号:\(\mathbf{A}_{MN}\),表示一个有两个指标,大小是\(M\times ...

weixin_39986973的博客 2407

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

numpy常用乘法函数总结:np.dot()、np.multiply()、*、np.matmul()、@、np.prod()、np.outer()

np.dot() 向量点积+矩阵乘法;np.multiply() 或者 * 在array下均为元素对位乘,但在mat/matrix下后者变为矩阵乘法;np.matmul() 或者 @ 完全等价,为矩阵乘法;np.prod() 返回数组中元素的乘积,可指定axis;np.outer() 外积,拿第一个向量的元素分别与第二个向量所有元素相乘得到的结果的一行,以此类推

qq_43629945的博客 1万+

Python-numpy使用及其常用函数介绍

Numpy基础及常见库的使用

gswsssw的博客 5395

Numpy加速的关键 -- 使用优化的方法

# -*- coding: utf-8 -*- """ Created on Sun Oct 23 20:05:57 2016@author: zang """import timeitnormal_py_sec = timeit.timeit('sum(x*x for x in xrange(1000))', number=10000) naive_np_sec = timeit.timeit('

搬砖小工053 5948

int和float类型的Numpy数组dot运算效率比较

在使用Numpy的dot函数时遇到了一个非常有意思的问题: int类型的Numpy数组进行dot运算的效率要远远低于float类型的Numpy数组。 同样的shape,但由于类型的不同却导致几十倍的性能差距。   在stackoverflow的一个帖子里找到了原因: “When Numpy is built with an accelerated BLAS like ATLAS, ...

sunnyyan的专栏 1674

python np.dot()函数的用法

numpy.dot(a,b) 如果a和b都是一维数组,那么它返回的就是向量的内积。 import numpy as np c = np.arange(0,9) d = c[::-1] np.dot(c,d) Out[35]: 84 如果a和b都是二维数组,那么它返回的是矩阵乘法。  import numpy as np a = [[1, 0], [0, 1]] b = [[4, 1...

lens_的博客 2万+

np.dot和for的计算速度比较

import numpy as np #help(np.array) a = np.array([1,2,3,4]) print(a) import time #help(np.random.rand) a = np.random.rand(1000000) b = np.random.rand(1000000) tic = time.time() c = np.dot(a,b) toc...

大西几的知识小仓库 1187

cupy利用GPU来加速你的numpy操作

导读 numpy是python中常用的一个矩阵运算库,而且numpy的底层都是采用c实现的,所以执行效率和速度也是很快的,但numpy是利用CPU来进行矩阵运算的,如果遇到大数据的矩阵运算,你会发现numpy真的很慢。 那有没有什么办法来加速呢?想到大矩阵的运算肯定会想多使用GPU来计算,就让我们来看看numpy的GPU版本cupy。 环境要求 操作系统 官方推荐安装环境是在linux操作系统下安装: Ubuntu 16.04 / 18.04 LTS (64-bit) CentOS 7 (64-bit)

修炼之路 1万+

python中np.multiply()、np.dot()和星号(*)三种乘法运算的区别

为了区分三种乘法运算的规则,具体分析如下:import numpy as np1. np.multiply()函数* 函数作用* 数组和矩阵对应位置相乘,输出与相乘数组/矩阵的大小一致 1.1数组场景A = np.arange(1,5).reshape(2,2) Aarray([[1, 2], [3, 4]]) B = np.arange(0,4).reshape(2,2) Bar

o_Eagle_o 17万+

Python讲堂--numpy np.dot()

https://www.cnblogs.com/luhuan/p/7925790.html

计算机视觉 327
上一篇: Matplotlib 循环绘制图片内存、速率优化方法
下一篇: 快速 Pearson Correlation 计算
大宋黄药师
博客等级 码龄5年 24粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值