matlab矩阵指定行求和,在matlab中对矩阵元素求和的有效(最快)方法
您似乎无法决定性能或浮点精度是否更重要。
如果浮点精度是最重要的准确度,那么您将分离正面和负面元素,对每个线段进行排序。然后按增加绝对值的顺序求和。是的,我知道,它的工作比任何人都多,而且可能是浪费时间。
相反,使用足够的精度,以便所做的任何错误都无关紧要。使用关于测试等的良好数值实践,这样就不会产生任何问题。
就时间而言,对于NxM阵列,
sum(A(:))将需要添加N * M-1。
sum(sum(A))将要求(N-1)* M + M-1 = N * M-1加法。
这两种方法都需要相同数量的添加,所以对于大型数组,即使解释器不够聪明,也不能认识到它们都是同一个操作系统,谁在乎呢?
这根本不是问题。不要为了担心这个而在鼹鼠山上筑山。
编辑:为了回应Amro对一种方法相对于另一种方法的错误的评论,你几乎无法控制。添加将以不同的顺序完成,但无法确定哪个序列会更好。
A = randn(1000);
format long g
两种解决方案非常接近。事实上,与eps相比,差异不大。
sum(A(:))
ans =
945.760668102446
sum(sum(A))
ans =
945.760668102449
sum(sum(A)) - sum(A(:))
ans =
2.72848410531878e-12
eps(sum(A(:)))
ans =
1.13686837721616e-13
假设您选择了我提到的隔离和排序技巧。看到负面和正面部分足够大,会导致精度下降。
sum(sort(A(A<0),'descend'))
ans =
-398276.24754782
sum(sort(A(A<0),'descend')) + sum(sort(A(A>=0),'ascend'))
ans =
945.7606681037
所以你真的需要在更高精度的数组中积累碎片。我们可以试试这个:
[~,tags] = sort(abs(A(:)));
sum(A(tags))
ans =
945.760668102446
即使在这些测试中也会出现一个有趣的问题。是否会出现问题,因为测试是在随机(正常)阵列上完成的?基本上,我们可以将sum(A(:))视为随机游走,醉汉的行走。但考虑总和(总和(A))。 sum(A)的每个元素(即内部和)本身是1000个正常偏差的总和。看看其中几个:
sum(A)
ans =
Columns 1 through 6
-32.6319600960983 36.8984589766173 38.2749084367497 27.3297721091922 30.5600109446534 -59.039228262402
Columns 7 through 12
3.82231962760523 4.11017616179294 -68.1497901792032 35.4196443983385 7.05786623564426 -27.1215387236418
Columns 13 through 18
当我们添加它们时,将会失去精确度。因此,作为sum(A(:))的操作可能会稍微准确一些。是这样吗?如果我们使用更高的精度积累怎么办?首先,我将使用双精度在列中形成总和,然后转换为25位十进制精度,并对行求和。 (我这里只显示了20位数字,将5位数字隐藏为保护数字。)
sum(hpf(sum(A)))
ans =
945.76066810244807408
或者,相反,立即转换为25位精度,然后对结果求和。
sum(hpf(A(:))
945.76066810244749807
因此,双精度的两种形式在这里都是相同的错误,方向相反。最后,这一切都没有实际意义,因为与简单的变量sum(A(:))或sum(sum(A))相比,我所展示的任何替代方案都要花费更多的时间。只需选择其中一个,不要担心。
matlab矩阵指定行求和,在matlab中对矩阵元素求和的有效(最快)方法相关推荐
- matlab矩阵指定行最大值,求Matlab程序:在2行矩阵中,如何求第1行最大值和第2行相应的最大,请问,如何在MATLAB中编写程序实现求两矩阵A*B,A.*...
导航:网站首页 > 求Matlab程序:在2行矩阵中,如何求第1行最大值和第2行相应的最大,请问,如何在MATLAB中编写程序实现求两矩阵A*B,A.* 求Matlab程序:在2行矩阵中,如何求 ...
- python如何创建一个列表_在python中创建列表的最佳和/或最快方法
在python中,据我所知,至少有3到4种方法来创建和初始化给定大小的列表: 简单循环append: my_list =[]fori inrange(50):my_list.append(0) 简单循 ...
- 在python中创建列表的最佳和/或最快方法
在python中,据我所知,至少有3到4种方法来创建和初始化给定大小的列表: 简单循环append: my_list = [] for i in range(50):my_list.append(0) ...
- python中矩阵的转置_[转]Python中的矩阵转置
Python中的矩阵转置 via 需求: 你需要转置一个二维数组,将行列互换. 讨论: 你需要确保该数组的行列数都是相同的.比如: arr = [[1, 2, 3], [4, 5, 6], [7, 8 ...
- java 数组相等_java – 检查数组中所有元素是否相等的最快方法
该算法是O(n),这是检查列表中所有元素的最快方法,因为您只需要检查每个元素一次. 现在只是因为这是查找所有元素是否等于某个值的最快算法,并不意味着您已将其优化到最大潜力. 这为多线程/多处理器实现留 ...
- matlab读取指定路径excel文件,MATLAB读取Excel文件
调试了好几个小时,点击名字成绩就是出不来,以为是玄学,后来终于发现,哪有什么玄学,其实就是无知,丢了一句guidata(hObject, handles); 1.guidata - 存储或检索 UI ...
- java 读取txt文件指定行_在Java中读取txt文件中的特定行
要获得第N行,您必须阅读它之前的所有行. 如果不止一次这样做,最有效的方法可能是首先将所有行加载到内存中. private final List words = new ArrayList(); pr ...
- 示例 - 10行代码在C#中获取页面元素布局信息
最近研究一个如何在网页定位验证码并截图的问题时, 用SS写了一段C#小脚本可以轻松获取页面任意元素的布局信息 (top, left, width, height). 10行功能代码, 觉得有点用, 现 ...
- python中对list元素求和、求积的普通方法和便捷方法
1.单个list 求和.求积最先想到的是for循环,可以直接使用python中封装的函数,一行代码解决问题,一般来说,能不用for循环就不用,因为相比于封装函数,for循环太慢. # -*- enco ...
- Java区间拆分子集求和,对列表中的数字子集求和
Is there a way in Kotlin for doing the sum() operation on a filtered list of numbers, without actual ...
最新文章
- 8.Map集合(HashMapTreeMap)
- DES/3DES/AES区别
- Bug整理——Spring boot 执行Junit Test时不加载Application中的参数的问题
- python 编辑excel需要什么包_Python 中操作EXCEL表格的包
- 最新安卓手机性价比榜公布:Redmi连夺三冠
- html2canvas截图只截取当前可视区域的问题
- web.xml中配置启动时加载的servlet,load-on-starup
- [网络安全自学篇] 二十五.Web安全学习路线及木马、病毒和防御初探
- java中set,get用法
- java指令打印 驱动打印总结 打印不需要手动选择打印机 愿你编码半生 都不会用到
- 关于Mybatis的深入学习(4)之动态SQL二十四道练习
- Gabor特征码分析
- 电子信息工程找什么工作,能干什么
- python开发的桌面应用程序
- U盘制作-BGA焊接练习
- 数商云跨境电商平台运营总结:整合渠道+深引流量
- java窗口程序实例_Java Swing快速构建窗体应用程序
- 黑马python2019_2019最新Python黑马头条推荐系统项目
- 它被称为“蓝领”的编程语言!90%的财富500强公司都在使用!
- 电解电容为什么会爆炸?