问题标签 [bsxfun]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4174 浏览

matlab - 不同大小的 matlab 矩阵(索引、for 循环和 bsxfun)

我有两个不同大小的矩阵。让我们将矩阵 {a} 定义为 a(1:10) <10 x 1> 并将矩阵 {b} 定义为 b(6:10) <5 x 1>。我需要一个 for 循环或等效的 (bsxfun) 来获取矩阵 {a} 和 {b} 之间的差异,代码将根据矩阵 {b} 的大小进行迭代。例如,矩阵 {a} 的第一个值为 1,代码将获取所有矩阵 {b} 值的差。因此,它将总共运行 5 次。矩阵 {a} 的下一个值为 2,代码将迭代 5 次。代码将迭代直到矩阵 {a} 结束,即值为 10。

如果可以的话,您可以编写一个不带 bsxfun 的 for 循环和一个带 bsxfun 的循环,并解释您是如何索引这些值的。另外,只是为了我的启发,如果有 N 个矩阵(N>2),而不是两个矩阵,代码将如何变化?

谢谢你。

0 投票
1 回答
189 浏览

matlab - Matlab优化

如果这太像“做我的功课”问题,我深表歉意。我有点卡住了,这是我要去的地方。这不是我编写的代码,但我现在正在维护它。

我有一个工具可以在糟糕的一天运行大约 8 个小时。我今天介绍了它。91.4% 的运行时间在一个子函数中,而这 70% 的时间都花在了这一行代码上。由于在 3-4 个嵌套的 for 循环内(不可避免),这在分析运行中被有效调用了 60000 次

目前的想法:

我认为也许我可以使用 bsxfun 代替 repmat (目前正在尝试)

当 cRange(1) = 0 时(就像在我的测试数据的一部分中所做的那样——我放在这里的部分),后半部分只是简单地除以 1——一种昂贵且毫无意义的计算。所以我想围绕这个使用'if'子句来避免不必要的计算。

调用另一种语言——这对我来说是全新的。应该会去试试吧。显然可以轻松访问 java,并且还可以创建 mex 文件。在后一种情况下,我认为传递数据的开销将非常昂贵,除非我重写大量代码而不仅仅是这一行。

如果您有任何其他想法,我将不胜感激。如果没有,我会继续做更多的研究。

编辑:刚刚注意到函数 repmats 的最后一行是完全没有必要的,因为您可以 .^ 通过标量值而无需将其更改为矩阵

二次编辑:这是到目前为止的样子。节省 30%。

但由于某种原因,在 2011a 年加速它的 bsxfun 变化在我们编译的 2008 年减慢了它。臭虫。

0 投票
2 回答
282 浏览

matlab - matlab:理解 matlab 行为

有人可以解释以下代码片段吗?我没有计算机科学或编程方面的背景,最近才开始了解 Matlab。我理解从data=ceil(rand(7,5)*10)...to的预分配部分...N*(N-1)/2)

我需要了解 matlab 如何从头到尾处理代码的各个方面kk=0。此外,代码以这种方式编码的原因。: 的作用就不用解释了bsxfun(@minus),只是在代码的方案中它是如何运作的。

0 投票
1 回答
467 浏览

matlab - matlab:cellfun中的乘法

嗨,我有以下 cellfun 操作:

其中 u 和 r 是向量。我想将叉积的结果乘以一个名为 I 的标量,但它必须在总和内。我可以简单地做:

这行得通吗?

实际上只是尝试过并得到:

有什么建议么?

更新:

0 投票
1 回答
1060 浏览

matlab - matlab:cellfun逻辑

我有一个(非常复杂 - 无论如何对我来说)cellfun 操作,我需要一个聪明的头脑来注视它,以判断它是否真的在做我想要的:

u 和 r 是元胞数组。我需要的算法:

-> 取 u{1} 的每个元素并将它们与 r{1} 的每个元素交叉乘积。-> 将生成的 81 x 3 单元格乘以 mag(大小 81 x 3)。-> 取 u{1} 的每个元素并将它们与 r{2} 的每个元素交叉乘积。-> 将生成的 81 x 3 单元格乘以 mag(大小 81 x 3)。

等等.....

我收到以下错误:

我的逻辑在哪里失败了?将 mag 更改为像 u 这样的单元阵列,然后使用 cellfun 进行乘法运算会更容易吗?

还会指出删除 mag:

按预期工作,因此将结果乘以 u 是一个问题。

编辑 gunthers 评论:

假设我有两个对象 u 和 r - 都是单元格

我想做的就是:

= 交叉([1 1 0],[3,3,0]) + 交叉([2 2 0],[2,2,0]) + 交叉([3 3 0],[1,1,0] )

然后重复:

0 投票
1 回答
159 浏览

matlab - 如何编码来呈现以下矩阵

我正在做我的研究。我无法编写代码来呈现以下矩阵。

矩阵 C 是显示矩阵 A 中值之前有多少个零的矩阵。

我有以下矩阵来表示矩阵 A 中的值。

这样我将通过组合 A 和 C 得到以下矩阵。

我从其他论坛得到了这个。

你有什么意见?

0 投票
1 回答
1372 浏览

matlab - 在Matlab中将稀疏矩阵行归一化为零均值

我有一个大的 m *n 稀疏矩阵 Y。我想对 Y 的每一行进行归一化,以便每一行的均值为零。

我第一次尝试这个。但是每行的平均值也会从零条目中减去,这不是我想要的。

然后我尝试了这个。

但是,这种非矢量化解决方案太慢了。

我也想过将 bsxfun 和 spfun 结合起来,但没有成功。

有人有矢量化解决方案吗?

0 投票
1 回答
935 浏览

matlab - MATLAB:与种子区域的相关性

默认情况下,所有用于计算相关性或协方差的内置函数都返回一个矩阵。我正在尝试编写一个有效的函数来计算种子区域和其他各种区域之间的相关性,但我不需要其他区域之间的相关性。我假设计算完整的相关矩阵因此效率低下。

我可以改为计算每个区域和种子区域之间的相关矩阵,选择一个非对角点并存储它,但我觉得在这种情况下循环也效率低下。

更具体地说,我的 3 维空间中的每个点都有一个时间维度。我正在尝试计算给定点与给定半径内空间中所有点之间的平均相关性。我想对许多不同的半径长度重复这个过程数十万次,等等,所以我希望这个过程尽可能高效。

那么,在不计算我将忽略的相关性的情况下,计算单个向量与其他几个向量之间相关性的最佳方法是什么?

谢谢你,克里斯

编辑:这是我现在的代码......

编辑:这里有更多时间来补充接受的答案。使用 bsxfun() 进行归一化,使用矩阵乘法计算相关性:

使用 zscore() 进行归一化,矩阵乘法计算相关性:

使用 bsxfun() 进行归一化,使用 corr() 计算相关性。

0 投票
2 回答
4561 浏览

python - 将一行 Matlab (bsxfun, rdivide) 翻译成 Python

我正在将一个 Matlab 函数翻译成 Python。不幸的是,我不是 Matlab 专家,我很难理解一些行,例如这一行:

我还没有真正理解它,但我认为这条线确实

对于 sqrt(a) 的每一行 r (或者是每一列?)并且 r / sqrt(a) 通常可以转换为 numpy 为

问题是:Matlab 说结果是

numpy 说是

这是由

错误在哪里?矩阵 sqrt(a) 和 a 只是示例。您可以用任何其他矩阵替换它们。我只是想了解 bsxfun 对 rdivide 的作用。

0 投票
1 回答
1056 浏览

performance - 矩阵乘法 > for 循环 > bsxfun - 奇数速度结果

我有一个 n × n 矩阵 A、一组 n 系数 k(n × 1)和称为行(1 × n)的矩阵。我的目标是从 A 的第 i 行中减去由 k 中的第 i 个系数加权的行。我有三个问题:为什么我的 for 循环比内置矩阵乘法执行得更好,一般来说,是什么解释了每种方法优于下一个,还有比我想出的三个更好的方法吗?

请注意,我正在算法中进行这些行减法。我稍微简化了代码,创建了这个玩具测试用例,但计算的关键仍然存在。此外,为避免混淆,使用带有 z 的 for 循环来使时间变长。