String MATLAB中三维变量字符串的处理

String MATLAB中三维变量字符串的处理,string,matlab,variables,String,Matlab,Variables,我一直在尝试编写一个脚本来处理一个3D变量字符串,eV50,eV60,eV70,等等(意思是从1950,1960,1970等中提取的值。这些3D变量的大小为31x145x192。)转换成一个3D输出字符串,即m1,m2、m3等(尺寸为1x145x192) 对你们中的一些人来说,这可能非常简单,但我在过去24小时里一直在努力让这一切正常进行。我通过使用循环和求值尝试了这两种方法,但在理解表达式中的“”括号时遇到了困难,因此我想这就是我无法正确平衡方程式的原因 *X是数据集eV50,eV60,eV7

我一直在尝试编写一个脚本来处理一个3D变量字符串,
eV50
eV60
eV70
,等等(意思是从
1950
1960
1970
等中提取的值。这些3D变量的大小为31x145x192。)转换成一个3D输出字符串,即
m1
m2
m3
等(尺寸为1x145x192)

对你们中的一些人来说,这可能非常简单,但我在过去24小时里一直在努力让这一切正常进行。我通过使用循环和求值尝试了这两种方法,但在理解表达式中的“”括号时遇到了困难,因此我想这就是我无法正确平衡方程式的原因

*X是数据集
eV50
eV60
eV70
等(表示从
1950
1960
1970
等中提取的值)

基本上,我正在尝试将此脚本转换为循环或类似的内容:

'[m1 v1]=extfunc(eV50)
[m2 v2]=extfunc(eV60)
[m3 v3]=extfunc(eV70)
[m4 v4]=extfunc(eV80)
[m5 v5]=extfunc(eV90)
[m6 v6]=extfunc(eV100)
等等 "


方法1:

“[平均变量]=eval(['extfunc(sprintf('eV%d',(50:10:80)'));”


方法2:

*我已经将
eV50
eV60
eV70
重命名为
eV1
eV2
eV3
等等

“因为i=1:6

m(i)=extfunc_h(sprintf('eV%d',i))

结束'

extfunc的用法:-

[mean variance] = extfunc(eV50)
在方法1中,我使用了不平衡方程,在方法2中,MATLAB返回了错误消息

???索引超出了矩阵维度。”



方法1的一个问题是,每个“开始”或结束一个字符串,但您希望其中一些是应该生成的字符串的一部分。为此,您需要两个:

[mean vars] = eval(['extfunc( sprintf('',eV%d'', (50:10:80)'') '')']);
这仍然不能满足您的要求。如果希望为
50:10:80
的每个元素生成字符串,则需要一个循环

第二种方法的问题可能是
extfunc
返回向量/数组/矩阵(对于
mean
;请注意,您不以这种方式记录
variance
),但您的赋值
m(i)=……
只能取标量值。如果
mean
是一个向量,请尝试
m(i,:)=…

然而,我宁愿质疑您处理字符串和
eval
的一般方法。如果重命名变量很容易,为什么不将它们放入单元格数组或(n+1)维矩阵中,让函数处理实际变量内容而不是变量名字符串

[编辑:误导性的“->”或“之前”(n+1)-维度矩阵”]

编辑以回答已编辑的问题: 虽然这样做的目的不是让其他人做你的工作,但你想要的似乎很简单:

year = 50:10:100;
for i=1:length(year)
    cmdstr = ['[m' int2str(i) ' v' int2str(i) '] = extfunc(eV' int2str(year(i)) ');'];
    eval(cmdstr);
end
如果出于某种原因,您更喜欢
sprintf
而不是字符数组连接,请尝试

cmdstr = sprintf('[m%d v%d]=extfunc(eV%d);',i,i,year(i))

相反。我仍然不相信使用
eval
和不同的变量名比在一个矩阵中收集
eV50
eV60
等更优雅地解决您的问题,例如
eV(:,:,:,1)=eV50;eV(:,:,:,2)=eV60不太清楚什么应该输入到
extfunc
(什么是
X
)-它是一个单变量,即
ev50
,还是一个变量列表

无论如何,第一种方法的问题是
sprintf
生成以下字符串:

,eV50,eV60,eV70,eV80

所以你在乞讨处有一个额外的
。此外,它仅适用于
extfunc
获取变量列表作为输入的情况。否则,您应该重新格式化字符串。

数据源是一个包含56940x145x192变量的结构,即使我正在使用一个功能相对强大的UNIX版本的Matlab(认为它有8TB内存),它也无法加载。另一方面,我对贴花时间尺度感兴趣,所以我可以在贴花期间组织数据。这些变量然后得到各种处理函数,如统计分析拟合和提取。在您的帮助下,我可以轻松地更改函数和变量,然后将它们作为批处理过程来执行。谢谢你,阿恩!这是很大的帮助,我现在对EVAL和SPRINTF有了更好的理解。