数组应该被视为水平结构还是垂直结构

2024-01-25

我正在做一些 Matlab 作业,在概念化它处理矩阵的方式时遇到问题。在 Matlab 中,矩阵的地址为d(row,col) format.

我已经编程了一段时间,并且总是倾向于将一维数组视为水平结构,其中第二维从下方延伸。

从计算机的角度来看,以下哪一个是“更正确”的思考数组数据结构的方法


好问题+1。

纯粹从 Matlab 编程的角度来看,最好将矩阵视为列向量序列。为什么?因为这就是 Matlab 将它们分配到计算机内存的方式。也就是说,矩阵的任何给定列中的两个连续元素将在内存中彼此相邻地分配。这有时称为“列主顺序”,用于 Fortran、R 和 Julia 等语言中。毫不奇怪,相反的顺序称为“行主序”,用于 C 和 Python 中。

这意味着 Matlab 在矩阵的列上执行操作比在行上执行操作要快得多。 @angainor 提供了很好的答案 https://stackoverflow.com/questions/12522888/arrayfun-can-be-significantly-slower-than-an-explicit-loop-in-matlab-why我几个月前提出的一个问题证明了这一事实。根据 @angainor 的见解,这里有一个有用的速度测试:

M = 1000; %# Number of iterations over each method
T = 1000; %# Number of rows
N = 1000; %# Number of columns

X = randn(T, N); %# Random matrix

%# Loop over the rows of a matrix and perform a sum operation on each row vector
tic
for m = 1:M
    for t = 1:T
        sum(X(t, :));
    end
end
toc

%# Loop over the columns of a matrix and perform a sum operation on each column vector
tic
for m = 1:M
    for n = 1:N
        sum(X(:, n));
    end
end
toc

在我的机器上,测试结果是:

Elapsed time is 9.371870 seconds. %# Looping over rows
Elapsed time is 1.943970 seconds. %# Looping over columns

换句话说,对列执行的操作几乎比对行执行的操作快 5 倍!

从数学角度来看,我不相信自己能给出一个好的答案。您可能会从中获得一些很棒的见解数学.stackexchange https://math.stackexchange.com/?as=1.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数组应该被视为水平结构还是垂直结构 的相关文章

  • 将一维数组转换为二维数组并加入 PHP [重复]

    这个问题在这里已经有答案了 我有这个一维数组 array1 Array coupon code gt GTY777R coupon description gt Credito 5 USD array2 二维数组 Array 0 gt Ar
  • 如何从一个清晰的例子计算二维图像中的吉布斯能量

    我有一个关于矩阵的有趣问题 在吉布斯分布中 吉布斯能量U x 可以计算为 这是所有可能的派系 C 上的派系势 Vc x 的总和 右图 团 c 被定义为 S 中站点的子集 x 蓝色像素的邻域是左图中黄色像素的邻居 其中每对不同的站点都是邻居
  • matlab 中的 for 或 while 循环

    我刚刚开始在编程课的 matlab 中使用 for 循环 基本的东西对我来说很好 但是我被要求 使用循环创建一个 3 x 5 矩阵 其中每个元素的值是其行号其列号除以行号和列号之和的幂 例如元素 2 3 的值为 2 3 2 3 1 6 那么
  • 如何在 MATLAB 中为 4 个子图创建一个通用图例?

    如何在 MATLAB 中为 4 个子图创建一个通用图例 如下所示 又快又脏 hSub subplot 3 1 1 plot 1 1 1 1 1 1 1 1 hLegend legend hello i am legend subplot 3
  • 奇怪的java字符串数组空指针异常[重复]

    这个问题在这里已经有答案了 这个问题是在实践测试中出现的 创建一个新的字符串数组 将其初始化为空 然后初始化第一个元素并打印它 为什么会出现空指针异常呢 为什么它不打印 一 这与字符串不变性有关吗 public static void ma
  • 过滤任何属性包含值的对象数组

    我想知道根据字符串关键字过滤对象数组的最干净 更好的方法是什么 必须在对象的任何属性中进行搜索 当我打字时lea我想遍历所有对象及其所有属性以返回包含的对象lea 当我打字时italy我想遍历所有对象及其所有属性以返回包含的对象italy
  • 对对象数组进行排序

    我在使用 PHP 手册中的示例时遇到了问题 所以我想在这里问这个 我有一个对象数组 有没有办法根据对象的内容对其进行排序 例如我的数组是 Array 0 gt stdClass Object id gt 123 alias gt mike
  • Lua表在内存中是如何处理的?

    lua如何处理表的增长 是否相当于ArrayList在Java中 IE 需要连续的内存空间 并且当它变得大于已经分配的空间时 内部数组被复制到另一个内存空间 有什么聪明的方法来引导吗 我的问题是 表是如何存储在内存中的 我不是问如何在 Lu
  • 需要有关使用 PHP 在 mysql 数据库中插入逗号分隔数据的帮助

    数据库表中已有的演示数据 INSERT INTO csvtbl ID SKU Product Name Model Make Year From Year To VALUES 1 C2AZ 3B584 AR Power Steering P
  • 如何使用神经网络保存 Sift 特征向量进行分类

    SIFT 特征的 Matlab 实现发现于http www cs ubc ca lowe keypoints http www cs ubc ca lowe keypoints 在 stackoverflow 的帮助下 我想将功能保存到 m
  • 为 SimpleXMLElements 数组编写 foreach 循环

    我正在使用 PHP 5 中的 XPath 来解析 XML 文档 我遇到的问题是写一个foreach正确显示以下数组 XML 文档示例 值1 值2 xmlfile link to file xml xmlRaw file get conten
  • 在Python 3中将二进制字符串转换为字节数组

    尽管有很多相关的问题 但我找不到任何符合我的问题的问题 我想更改二进制字符串 例如 0110100001101001 转换成字节数组 同一个例子 b hi 我试过这个 bytes int i for i in 011010000110100
  • Java中整数数组的排列算法

    我有一个工作示例来生成字符串中的所有字符排列 如下所示 static ArrayList
  • 数组初始化编译时间 - Constexpr 序列

    我正在读书this https stackoverflow com questions 45938798 for loop with variable step size c 45939130关于SO的问题 这个问题本身并不是那么有趣 但我
  • 如何在 PHP 数组中的另一个已知(通过键或指针)元素之后有效地插入元素?

    给定一个数组 a array abc 123 k1 gt v1 k2 gt v2 78 tt k3 gt v3 当其内部指针指向其元素之一时 如何在当前元素之后插入元素 如何在键已知元素 例如 k1 之后插入元素 表现护理 您可以通过使用拆
  • 如何 grep 遍历数组,同时过滤掉匹配项?

    有没有一种快速简便的方法来 grep 遍历数组 找到满足某些测试的元素and从原始数组中删除这些 例如我想要 a 1 7 6 3 8 4 b grep filter gt 5 a now b 7 6 8 and a 1 3 4 换句话说 我
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • 从java中的字符串数组中删除空值

    java中如何从字符串数组中删除空值 String firstArray test1 test2 test4 我需要像这样没有 null 空 值的 firstArray String firstArray test1 test2 test4
  • 有没有办法在 MATLAB 中查看 pcode 文件 (.p) 的源代码?

    有没有办法在 MATLAB 中打开 pcode 文件 p 如果 开放 是指edit 那么当然不是 pcode 中的 p 代表 受保护 其主要设计目标是在保护其源代码的同时部署功能组件 如果 开放 是指run 那么当然是的 引用手册 http

随机推荐

  • 可用的viewcell按钮

    我有 tableview 我在其中对 tableviewcell 进行了子类化 单元格中有一个水平滚动视图 我向滚动视图添加动态按钮 我的要求 1 当我第一次点击 row0 上的按钮时 我需要为点击的按钮设置不同的 BG 颜色 并在数组中添
  • 运行“app”时出错:Android studio 3.1 中出现未知错误

    我已经将我的 android studio 更新到了新的稳定版3 1版 构建项目后无法运行 如果有人遇到同样的问题或找到任何解决方案 请告诉我 只需前往 运行 编辑配置 并向下滚动到窗口底部 在这里您会看到一个选项 发射前 首先 删除小窗口
  • 如何使用 GNU Parallel 编写多核排序

    GNU 并行 http www gnu org software parallel GNU并行是一个shell工具 用于使用一台或多台计算机并行执行作业 例如 如果我想编写一个多核版本wc我可以做 cat XXX parallel bloc
  • 如何使用 awk 每 n 行插入一个空行?

    我有一个像这样的输入文件 line 1 line 2 line 3 line 4 line 5 line 6 我想使用 awk 每隔几行插入一个空行 例如 每两个 line 1 line 2 line 3 line 4 line 5 lin
  • Mac 上的 Mercurial“未提供用户名”错误

    我刚刚在 OSX Mountain Lion Max 10 8 上安装了 Mercurial 在第一次提交时出现错误 abort no username supplied see hg help config 我看到了很多答案 这些答案表明
  • make找不到tools.jar

    运行Ubuntu 12 04 我已经添加到路径 home jeffrey jdk1 6 0 43 lib 我正在尝试使用 Make 从源代码构建 make j16 但遇到错误 build core config mk 268 Error c
  • 来自 pandas Dataframe 的具有不确定性的 LaTeX 表

    我目前正在编写一份报告 其中包含用 python 计算并存储在 pandas DataFrame 中的许多值和不确定性 这些值必须放入报告中 包括错误 目前我唯一的方法是手动将值与错误合并 其中一个示例如下所示 begin tabular
  • 如何MVC 5下拉(多选)框

    我在使用这个下拉框时遇到了问题 似乎无法正确处理 代码如下 查看 Index cshtml using EvaSimulator Models Model EvaSimulator Models ModelVariables ViewBag
  • 当有更多可用机器时,Spark 仅使用一台工作机器

    我正在尝试通过 Spark 并行化机器学习预测任务 我之前已经在其他任务中成功使用过 Spark 多次 并且之前没有遇到过并行化问题 在这个特定任务中 我的集群有 4 个工作线程 我在具有 4 个分区的 RDD 上调用 mapPartiti
  • 使用 silverlight 的 Wcf 服务的最佳实践?

    您将如何构建在 silverlight 应用程序中调用 wcf 服务的代码 仅使用一次实例化的 wcf 服务代理 又名单例 并在整个 SL 应用程序中使用它 如果是这样 您如何解决 ws call completed 事件取消订阅控件的问题
  • 计算卷积的最快方法

    有人知道计算卷积最快的方法吗 不幸的是 我处理的矩阵非常大 500x500x200 如果我使用convn在 MATLAB 中 这需要很长时间 我必须在嵌套循环中迭代此计算 所以 我使用了 FFT 卷积 现在速度更快了 但是 我仍在寻找更快的
  • 如何在jmeter中设置IP欺骗?

    我现在正在我的机器上通过 jmeter 对网站进行负载测试 但我想要一个真实的场景 那么 jmeter 是否可以使用 ip 别名或 ip 欺骗 这看起来像是从不同的 ip 地址发送请求 是的 可以 查看属性源IP地址 http jmeter
  • SQL 空值内连接

    我有一个加入 SELECT FROM Y INNER JOIN X ON ISNULL X QID 0 ISNULL y QID 0 Isnull像这样的 Join 会使速度变慢 这就像有一个条件连接 对于这样的事情有什么解决办法吗 我有很
  • 没有全局变量的Python动画

    我正在编写康威生命游戏的实现 我的第一次尝试只是在每次更新后使用 matplotlib 的 imshow 在 1 和 0 的 NxN 板上绘制板图 然而 这不起作用 因为程序在显示情节时就会暂停 您必须关闭绘图才能获得下一个循环迭代 我发现
  • 随机选择一个区域并对其进行多次处理

    我有一个这样的数据 gt sp Q96A73 P33MX HUMAN Putative monooxygenase p33MONOX OS Homo sapiens OX 9606 GN KIAA1191 PE 1 SV 1 RNDDDDT
  • 通过在同一日期或最近的先前日期(不仅仅是完全匹配)加入来合并两个表

    我有两张表 客户ID 潜在客户日期 潜在客户来源 and 客户ID 产品 兴趣 日期 产品 兴趣 我希望两个创建一个表 其中对于每个 CustomerID 每个 Product Interest 连接到最接近日期 但不是之后 的 Lead
  • CakePHP“尝试获取非对象的属性”错误

    当我发布表单时 它显示错误 Trying to get property of non object APP Controller UsersController php line 647 这里是ctp文件表单代码 admin highli
  • 模块中的全局变量范围

    以下是我的文件和输出 我想做的就是获得价值x after func1 as 20 我已经参考过这个答案 https stackoverflow com questions 15595393 python global variable sc
  • 如何解释elf符号表部分的st_info字段

    The man page http manpages ubuntu com manpages xenial man5 elf 5 html有这样说 st info This member specifies the symbol s typ
  • 数组应该被视为水平结构还是垂直结构

    我正在做一些 Matlab 作业 在概念化它处理矩阵的方式时遇到问题 在 Matlab 中 矩阵的地址为d row col format 我已经编程了一段时间 并且总是倾向于将一维数组视为水平结构 其中第二维从下方延伸 从计算机的角度来看