gpt4 book ai didi

matlab - 将空矩阵分配给Matlab中的空子矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 20:29:45 25 4
gpt4 key购买 nike

在 Matlab 中运行以下代码时:

a = magic(3);
b = [];

a([],:) = [] % works
a([],:) = b % doesn't work

我在使用变量“b”时遇到错误:

>> tmp
a =
8 1 6
3 5 7
4 9 2
Subscripted assignment dimension mismatch.
Error in tmp (line 5)
a([],:) = b

有人知道这是怎么回事吗?为什么一项作业有效而另一项无效?

最佳答案

以下是我对 Matlab 行为的原因的猜测:

我认为分配给 [] 可以被认为是一个特殊的运算符,即 a(1,:) = [] 基本上会删除 的第一行>一个。因此,尽管 size(a(1,:)) 不同于 size([]),我认为 Matlab 解释器知道这种特殊情况不是赋值。

然而 a(1,:) = bb=[] 时会出现下标维度不匹配。我认为这是正确的行为,因为在这种情况下,您正在分配,并且您试图将 0×0 分配给 1×3,这是维度不匹配。 a([],:) = b 也是如此,您试图将 0×0 放入 0×3 空间,这又是不匹配的。

所以总而言之,第二种情况是赋值运算符,所以错误是有道理的。第一种情况是一个特殊的删除运算符,因此没有错误。

我对此没有任何引用(this is all I could find in the docs 但它并没有真正涵盖所有内容)


但是我不认为这可以解释所有行为,从评论中举出一些例子:

假设:

a = magic(3);
a2 = magic(4);
b = [];
  1. a([],:) + a2([],:) 给出了预期的尺寸不匹配错误。
  2. a([],:) = a2([],:) 不会抛出错误...这对我来说不是预期的
  3. a([],:) = b(:) 也不会抛出错误...这又很奇怪,除非我们可以假设 (:) 操作返回逗号分隔的列表,就像 {:} 一样(虽然我知道情况并非如此)???

这些案例对我来说似乎不一致。

我们可以扩展案例 2:

a([],:) = zeros(0,0)
a([],:) = zeros(0,2)
a([],:) = zeros(0,3)
a([],:) = zeros(0,4)

只有第一种情况会抛出错误,而其他 3 种情况会被 Matlab 接受。看起来这个答案只是在制造更多问题:/

关于matlab - 将空矩阵分配给Matlab中的空子矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24303655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com