【问题标题】:Getting array from struct array in Matlab without loops从Matlab中的struct数组中获取数组而无需循环
【发布时间】:2014-08-06 07:43:24
【问题描述】:

我有一个包含一些对象的二进制图像,我想获取这些对象的一些特征。

I = imread('coins.png');
B = im2bw(I, 100/255); B = imfill(B, 'holes');

RP = regionprops(B, 'Area', 'Centroid');

RP变成结构体数组:

10x1 struct array with fields:
    Area
    Centroid

我需要从这个结构中创建两个数组,称为AreasCentroids。 如何做到没有循环?

使用循环我们可以这样:

N = numel(RP);
Areas = zeros(N, 1); Centroids = zeros(N, 2);
for idx=1:N, 
    Areas(idx) = RP(idx).Area; 
    Centroids(idx, :) = RP(idx).Centroid; 
end

【问题讨论】:

    标签: arrays matlab loops struct


    【解决方案1】:

    你可以简单地连接

    Areas = [RP.Area];
    Centroids = vertcat( RP.Centroid );
    

    PS,
    最好是not to use i as a variable name in Matlab

    【讨论】:

    • 嘿,就是这么简单!谢谢。附:是的,我已经更正了我的代码
    • 现在我认为ij 不会对运行时间或开销产生很大影响。 1i1j 也是表示虚数的正确方法。如果您自己编写代码,请确保始终使用1i,如果您在公司工作,则应该在这方面有实践。当然,使用i 作为变量可能容易出错,但我个人对此并不反对。除非你能证明使用i 作为循环变量会显着降低性能,否则我会说它是matter of taste。否则很好的代码+1
    • @patrik 我同意避免使用i 作为变量比“必须”更像是一种好的做法,但我们正在努力在这里推广更好的做法。参见例如this recent post
    • @Shai 避免使用i 是否是一种好习惯很大程度上取决于您习惯于做什么。一个有其他编程语言经验的人(不使用i作为复数)可能已经使用i作为他生活中的循环变量。对于嵌套循环,他甚至可能使用了一组特殊的循环变量i,j,k,... 来跟踪他目前所处的循环。在那种情况下,我会说改变这种行为是一种不好的做法。有问题的人几乎肯定会在某个循环中滑入i,只是想知道为什么当他再次看到代码时
    猜你喜欢
    • 2013-03-28
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多