Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-14, 20:13   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 Matlab(R2010a 64位linux)中另一个结构中结构的大小

我正在使用Matlab API,该API将专有格式的数据加载到一系列结构中。这是加载文件后数据集的示例:
>> fieldnames(数据(1))

回答=

'Grid_Point_ID' 'Grid_Point_Latitude' 'Grid_Point_Longitude' 'Grid_Point_Altitude' 'Grid_Point_Mask' 'BT_Data' >>数据(1).BT_Data

回答=

BT_Data: [1x66 struct] >>字段名称(数据(1).BT_Data(1))

回答=

'Flags' 'BT_Value_Real' 'BT_Value_Imag' 'Pixel_Radiometric_Accuracy' 'Incidence_Angle' 'Azimuth_Angle' 'Faraday_Rotation_Angle' 'Geometric_Rotation_Angle' 'Snapshot_ID_of_Pixel' 'Footprint_Axis1' 'Footprint_Axis2'
我想遍历所有data(i).BT_Data(j) 。我已经有足够的data长度,但是我无法获得BT_Data的大小/长度(每个data(i) ):
>>长度(数据(1).BT_Data)

回答=

1 >>大小(数据(1).BT_Data)

回答=

1 1
我的预期结果是ans = 66 (或size()等效数组)。

我对结构数据格式不是很熟悉,这可能是我挣扎的一部分。但是length(data)很好用,所以我很困惑为什么它不能在BT_Data工作(我也尝试过BT_Data(:) )。

我可以找到的最相关的先前答案是1757250 ,但我无法使其正常工作(我认为它不适用于此处)。感谢您提供的任何见解。

------编辑------

关于我如何使用API甚至达到我所要达到的目的,这里有一些更多的见解:
>> system('ln -sf /opt/rwapi-matlab/lib/rwapi/smos/config/xml_rw_api.usr_conf.xml。');
setenv('XML_RW_API_HOME','/ opt / rwapi-matlab / lib / rwapi');
路径(路径,'/ opt / rwapi-matlab');

>>产品= RWAPI.product('SM_OPEB_MIR_SCLF1C_20110202T013659_20110202T014642_346_060_1')

阵列SMOS Matlab接口1.4版
(c)2010年加拿大Array Systems Computing Inc.( http://www.array.ca
分发或修改此软件需要Array的书面许可

产品=

RWAPI.product handle Package: RWAPI Properties: filename: 'SM_OPEB_MIR_SCLF1C_20110202T013659_20110202T014642_346_060_1' header: [1x1 struct] xml_datablock: [] 方法,事件,超类

>>数据= prod.dataset(2)

数据=

没有属性的RWAPI.dataset句柄。包装:RWAPI

方法,事件,超类

>>数据(1)

回答=

Grid_Point_ID: 251721 Grid_Point_Latitude: 25.5000 Grid_Point_Longitude: -102.2590 Grid_Point_Altitude: 1.4714e+03 Grid_Point_Mask: 2 BT_Data: [1x66 struct] >>数据(1).BT_Data

回答=

BT_Data: [1x66 struct] >>数据(1).BT_Data(1)

回答=

Flags: 6229 BT_Value_Real: 262.5275 BT_Value_Imag: 0 Pixel_Radiometric_Accuracy: 6160 Incidence_Angle: 31966 Azimuth_Angle: 10299 Faraday_Rotation_Angle: 65277 Geometric_Rotation_Angle: 58605 Snapshot_ID_of_Pixel: 65752530 Footprint_Axis1: 19649 Footprint_Axis2: 14625 >>谁
名称大小字节类属性

ANS 1X1 1逻辑
数据1x19091 112 RWAPI.dataset
产品1x2 112 RWAPI.product

回答:

好的,我真的怀疑这是那些RWAPI类中重写的subsref方法的怪异之处。通过定义一个带有轻微病理性子参照的类,我能够重现您观察到的所有行为。

classdef stupidref %STUPIDREF Reproduce odd indexing behavior that jpatton saw. Buggy. properties BT_Data = repmat(struct('foo',42, 'bar',42), [1 66]); end methods function B = subsref(A,S) s = S(1); subs = s.subs; chain = S(2:end); switch s.type case '()' B = builtin( 'subsref', A, s ); if ~isempty(chain) B = subsref(B, chain); end case '.' % Non-standard behavior! if ~isempty(chain) && isequal(chain(1).type, '()') B = subsref(A.(s.subs), chain); else B = struct(s.subs, A.(s.subs)); end end end end end 这与data(1).BT_Data和fieldnames(data(1).BT_Data(1))之间的怪异差异以及重复添加“ .BT_Data”的制表符完成一致。

>> data = stupidref; >> data(1).BT_Data ans = BT_Data: [1x66 struct] >> fieldnames(data(1).BT_Data) ans = 'BT_Data' >> fieldnames(data(1).BT_Data(1)) ans = 'foo' 'bar' >> length(data(1).BT_Data) ans = 1 >> data(1).BT_Data.BT_Data.BT_Data.BT_Data.BT_Data.BT_Data % produced by tab-completion ans = BT_Data: [1x66 struct] >> 您的解决方法是好的-调用a = data(1).BT_Data ,您将拥有一个普通的结构,并且非标准的subsref成为了障碍。使用getfield可以在一排中获得相同的效果。

>> btdata = getfield(data(1).BT_Data, 'BT_Data') btdata = 1x66 struct array with fields: foo bar 我会将此作为可能的错误报告给RWAPI库作者。

随意编辑此代码为您自己的解决方法答案;支持诊断本身并不是一个真正的答案。



更多&回答...
poster 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 03:19


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.