【问题标题】:matlab fill array with vectorsmatlab用向量填充数组
【发布时间】:2012-07-03 02:16:29
【问题描述】:

我希望用向量填充一个 nxn 矩阵。我有以下内容:

[x y] = meshgrid(a);
for i:size(a,1)
    for j:size(a,2)
        b = [x(i,j),y(i,j) 0];
    end
end

我认为这里可能有点天真,因为我期望 b 的向量元素中有一系列不同的数字。相反,我得到 b 的元素都是相等的。还有

size(b) = 1 3
size(b(1,1)) = 1 1

我期望 size(b(1,1)) = 1 3 因为 b 中的每个元素都应该是长度为 3 的向量。有人能告诉我哪里出错了吗?非常感谢。

【问题讨论】:

  • b{i,j} = [x(i,j),y(i,j) 0]; ?
  • 嗨 Junuxx - 当我尝试这个时,我得到了???将单元格内容分配给非单元格数组对象。

标签: matlab matrix


【解决方案1】:

您正在覆盖循环中b 的值。 试试:

[x y] = meshgrid(a);
b = zeros( size(a,1) size(a,2) 3);
for i:size(a,1)
    for j:size(a,2)
        b(i,j,:) = [x(i,j),y(i,j) 0];
    end
end

【讨论】:

  • 嗨,安德烈,当我尝试得到:???Assignment 的非单件 rhs 维度比非单件下标多....
  • @brucezepplin,您的代码中的a 是什么?另请参阅我修改后的代码
  • 嗨 Andrey - a 只是我正在阅读的图像:a = imread('circle.png') 然后 a = a(:,:,1);
  • 关于更新代码的输出,我得到 size(b) = [70 70 3]。我期待 size(b(1,1)) = [1 3] 但是我得到 [1 1]。 b 中的每个元素都应该是一个大小为 3 的向量,但是我没有得到这个。
  • @brucezepplin,在这种情况下,您应该使用元胞数组
【解决方案2】:

有几种方法可以用向量填充 n×n 数组 b

(1) 您可以创建一个 n×n×3 数组,以便 squeeze(b(i,j,:)) 将向量 i,j 作为 3×1 数组返回:

a=1:3,
[x y] = meshgrid(a);
b = cat(3,x,y,zeros(size(x));

(2) 您可以创建一个 n×n 元胞数组,以便 b{i,j} 返回向量 i,j

a=1:3,
[x y] = meshgrid(a);
b = arrayfun(@(x,y)[x,y],x,y,'uni',false);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    相关资源
    最近更新 更多