您似乎无法决定性能或浮点精度是否更重要。

如果浮点精度是最重要的准确度,那么您将分离正面和负面元素,对每个线段进行排序。然后按增加绝对值的顺序求和。是的,我知道,它的工作比任何人都多,而且可能是浪费时间。

相反,使用足够的精度,以便所做的任何错误都无关紧要。使用关于测试等的良好数值实践,这样就不会产生任何问题。

就时间而言,对于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中对矩阵元素求和的有效(最快)方法相关推荐

  1. matlab矩阵指定行最大值,求Matlab程序:在2行矩阵中,如何求第1行最大值和第2行相应的最大,请问,如何在MATLAB中编写程序实现求两矩阵A*B,A.*...

    导航:网站首页 > 求Matlab程序:在2行矩阵中,如何求第1行最大值和第2行相应的最大,请问,如何在MATLAB中编写程序实现求两矩阵A*B,A.* 求Matlab程序:在2行矩阵中,如何求 ...

  2. python如何创建一个列表_在python中创建列表的最佳和/或最快方法

    在python中,据我所知,至少有3到4种方法来创建和初始化给定大小的列表: 简单循环append: my_list =[]fori inrange(50):my_list.append(0) 简单循 ...

  3. 在python中创建列表的最佳和/或最快方法

    在python中,据我所知,至少有3到4种方法来创建和初始化给定大小的列表: 简单循环append: my_list = [] for i in range(50):my_list.append(0) ...

  4. python中矩阵的转置_[转]Python中的矩阵转置

    Python中的矩阵转置 via 需求: 你需要转置一个二维数组,将行列互换. 讨论: 你需要确保该数组的行列数都是相同的.比如: arr = [[1, 2, 3], [4, 5, 6], [7, 8 ...

  5. java 数组相等_java – 检查数组中所有元素是否相等的最快方法

    该算法是O(n),这是检查列表中所有元素的最快方法,因为您只需要检查每个元素一次. 现在只是因为这是查找所有元素是否等于某个值的最快算法,并不意味着您已将其优化到最大潜力. 这为多线程/多处理器实现留 ...

  6. matlab读取指定路径excel文件,MATLAB读取Excel文件

    调试了好几个小时,点击名字成绩就是出不来,以为是玄学,后来终于发现,哪有什么玄学,其实就是无知,丢了一句guidata(hObject, handles); 1.guidata - 存储或检索 UI ...

  7. java 读取txt文件指定行_在Java中读取txt文件中的特定行

    要获得第N行,您必须阅读它之前的所有行. 如果不止一次这样做,最有效的方法可能是首先将所有行加载到内存中. private final List words = new ArrayList(); pr ...

  8. 示例 - 10行代码在C#中获取页面元素布局信息

    最近研究一个如何在网页定位验证码并截图的问题时, 用SS写了一段C#小脚本可以轻松获取页面任意元素的布局信息 (top, left, width, height). 10行功能代码, 觉得有点用, 现 ...

  9. python中对list元素求和、求积的普通方法和便捷方法

    1.单个list 求和.求积最先想到的是for循环,可以直接使用python中封装的函数,一行代码解决问题,一般来说,能不用for循环就不用,因为相比于封装函数,for循环太慢. # -*- enco ...

  10. Java区间拆分子集求和,对列表中的数字子集求和

    Is there a way in Kotlin for doing the sum() operation on a filtered list of numbers, without actual ...

最新文章

  1. 8.Map集合(HashMapTreeMap)
  2. DES/3DES/AES区别
  3. Bug整理——Spring boot 执行Junit Test时不加载Application中的参数的问题
  4. python 编辑excel需要什么包_Python 中操作EXCEL表格的包
  5. 最新安卓手机性价比榜公布:Redmi连夺三冠
  6. html2canvas截图只截取当前可视区域的问题
  7. web.xml中配置启动时加载的servlet,load-on-starup
  8. [网络安全自学篇] 二十五.Web安全学习路线及木马、病毒和防御初探
  9. java中set,get用法
  10. java指令打印 驱动打印总结 打印不需要手动选择打印机 愿你编码半生 都不会用到
  11. 关于Mybatis的深入学习(4)之动态SQL二十四道练习
  12. Gabor特征码分析
  13. 电子信息工程找什么工作,能干什么
  14. python开发的桌面应用程序
  15. U盘制作-BGA焊接练习
  16. 数商云跨境电商平台运营总结:整合渠道+深引流量
  17. java窗口程序实例_Java Swing快速构建窗体应用程序
  18. 黑马python2019_2019最新Python黑马头条推荐系统项目
  19. 它被称为“蓝领”的编程语言!90%的财富500强公司都在使用!
  20. 电解电容为什么会爆炸?

热门文章

  1. 华为企业网络营销系统分析报告
  2. 华为外包的感受(CSDN)
  3. WIN11右键菜单默认展开
  4. 面试官再问分布式事务,求你看完这份至尊级分布式笔记,给年轻的面试官上一课
  5. 【Python】:修改图片后缀
  6. 缓冲区溢出实例(一)--Windows
  7. k8s教程01(k8s环境配置及私有仓库搭建)
  8. php screw.so,php screw加密
  9. 引用百度地图,隐藏百度地图logo
  10. 新知实验室-基于腾讯云音视频TRTC的微信小程序实践