当前位置: 首页 > 知识库问答 >
问题:

将[i][j]改为[j][i][duplicate]时,迭代矩阵的速度较慢

戴品
2023-03-14

我有一个ints的矩阵,名为a,当我按列而不是按行迭代它时,它的运行速度会慢50毫秒:

for(int i=0;i<n;i++)  
    for(int j=0;j<n;j++)  
        cout<<A[j][i];    //slower than of A[i][j]

有人知道为什么会这样吗?我问过几个人,但他们都不知道为什么。我肯定这与地址在计算机内存中的表现方式有关,但我还是想找到一个更具体的答案。

共有1个答案

龙令雪
2023-03-14

逐行迭代矩阵的速度更快,因为有了高速缓存。

当您访问A[i][j]时,将有更多的内存加载到缓存中,而不仅仅是一个元素。请注意,矩阵的每一行都存储在连续的内存块中,因此,当A[i][j]“周围”的内存仍在缓存中时,访问同一行中的下一个元素更有可能导致从缓存而不是主内存读取该元素(参见缓存未命中)。

请参阅相关问题:
为什么循环的顺序会影响在二维数组上迭代时的性能?
这两个for循环中哪一个在时间和缓存性能方面更有效
缓存如何工作?
矩阵乘法:矩阵大小差异小,定时差异大

 类似资料:
  • 问题内容: 我在一个开始从事的项目中遇到了这段代码。原始开发人员不再可用,我对此一无所知: 产生值为。这是如何运作的? 什么是运算符? 什么是运算符? 什么是运算符? 什么是运算符? 问题答案: 什么是运算符? 那是两个运算符,一个是赋值运算符,一个是一元加号,它什么都不做。 您是否输入错了并表示compund赋值运算符? 什么是运算符? 还有两个运算符,一个为后递增,一个为加法(根据最大划分规则

  • 我在这里读这篇社论:https://www.geeksforgeeks.org/given-an-array-arr-find-the-maximum-j-i-such-that-arrj-arri/我无法理解O(n)解是如何工作的。描述它的段落似乎与准则相矛盾。我已经查看了一个示例阵列,手动确保这似乎是可行的,但对我来说,这似乎一点都不直观。 如果有人在解决编程难题方面更有经验,他会愿意解释这是

  • 我自己用Adobe制作了图像(“trial.jpg”),并在图像中放置了一些红色、绿色和蓝色像素,这是一个从0,0(即左上角)开始的(30,11)像素网格。 这是我的代码: 我检查日志,但我得到错误的RGB值。我知道这个原因,我把红色(255,0,0),蓝色(0,0,255)和绿色(0,255,0)放在那些特定的正方形(像素)。 以下是日志: 我试着用8位Jpeg格式保存它...和16位Jpeg.

  • 我试图让它,使一个像素在图像中的位置(inti,intj)决定该像素的颜色。这是一个java2d游戏中的爆炸效果,我想让爆炸的颜色取决于爆炸的位置,从而变得格外酷。我目前正在做的是创建一个颜色的,然后使用作为索引,在一张1000x1000的图像上进行测试,显示沿对角线的镜像,这自然是因为围绕对角线,如下所示。 知道是第1000个像素,而是第999001个像素,你如何得到一个映射像素到颜色,而不首先

  • 问题内容: 我知道这是电气工程惯例,但是我仍然想知道为什么选择Python。我不知道其他具有复数文字的编程语言,因此我没有什么可比较的,但是有人知道有使用i的语言吗? 问题答案: 如您所料,这似乎是因为Python遵循电气工程惯例。这是Python Bug跟踪器Issue10562的交换: BoštjanMejak :在Python中,字母“ j”表示虚数单位。如果我们在这方面遵循数学并以“ i”