将字符串附加到 Matlab 数组
Posted
技术标签:
【中文标题】将字符串附加到 Matlab 数组【英文标题】:Appending string to Matlab array 【发布时间】:2011-01-18 08:03:13 【问题描述】:如何将字符串追加到 Matlab 数组列?
这是我正在尝试做的一个小代码sn-p:
for_loop
filename = 'string';
name=[name; filename]
end
【问题讨论】:
【参考方案1】:你走对了。使用 构建元胞数组,如下所示
stringtable = 'a string';
for i = 1:3
stringtable = stringtable;new_string(i)
end
应该做你想做的。
【讨论】:
使用 ... 像这样迭代构造最终会得到一个嵌套单元数组,如树或 Lisp 列表,而不是 cellstr。怎么样 "strs = 'a string'; for i=1:3; strs = [strs; new_string(i)]; end" 或 "... strsend+1 = new_string(i) ; ...”?【参考方案2】:如其他地方所述,在 MATLAB 中,数组中的所有字符串必须具有相同的长度。要拥有不同长度的字符串,请使用元胞数组:
name = ;
for i = somearray
name = [name; string];
end
【讨论】:
【参考方案3】:您需要使用元胞数组。如果事先知道迭代次数,我建议你预先分配:
N = 10;
names = cell(1,N);
for i=1:N
namesi = 'string';
end
否则你可以这样做:
names = ;
for i=1:10
namesend+1 = 'string';
end
【讨论】:
哇,感谢 end+1 语法,我什至不知道在那种情况下存在“end”。 是的 end+1 比 length(..)+1 好得多! 我需要使用names
作为fopen
的输入,但是fopen
抱怨它的类型错误:cell
。如何将单元格类型转换为字符串?【参考方案4】:
正如其他答案所指出的,使用 cell arrays 可能是最直接的方法,这将导致您的变量 name
成为一个单元格数组,其中每个单元格元素都包含一个字符串。
但是,还有另一个选项使用函数STRVCAT,它将垂直连接字符串。这将创建一个二维字符矩阵,而不是创建一个元胞数组,每行包含一个字符串。 STRVCAT 会在必要时自动用空格填充字符串的末端,以正确填充矩阵的行:
>> string1 = 'hi';
>> string2 = 'there';
>> S = strvcat(string1,string2)
S =
hi
there
【讨论】:
【参考方案5】:name=[];
for_loop
filename = 'string';
name=[name; filename];
end
【讨论】:
【参考方案6】:如果您使用如下所示的两个数组(A 和 B),您可以像处理其他矩阵一样附加它们。
A = 'a' ; 'b' ; 'c';
B = '1' ; '2' ; '3';
Result = A:,1 ; B:,1
Result =
'a' 'b' 'c'
'1' '2' '3'
【讨论】:
【参考方案7】:我知道这是一个旧线程,但如果这就是你在循环中所做的一切,你似乎甚至不需要循环。你可以只使用垂直连接吗?
mmm = 'str1'; 'str2'; 'str3';
temp = 'a'; 'b'; 'c';
mmm = [mmm; temp]
mmm =
'str1'
'str2'
'str3'
'a'
'b'
'c'
【讨论】:
【参考方案8】:使用strcat
函数追加一行代码而不使用循环:
A='food','banana','orange'
A = '食物' '香蕉' '橙子'
A = strcat(A,'s')
A = '食物' '香蕉' '橙子'
【讨论】:
加1;谢谢!不知道strcat
适用于大小不一的连接!【参考方案9】:
为了完整起见,还应提及 MATLAB R2016b 中引入的新 string
class;文本数据的容器以及一组便于文本操作的函数。
为了和我的other example比较,这里是如何分配string array:
N = 10;
names = strings(1,N);
for i=1:N
names(i) = 'string';
end
这里是如何在不预分配的情况下动态扩展数组:
names = strings(0);
for i=1:10
names(end+1) = 'string';
end
(当然如果字符串都是相同的或者形成一个带有模式的序列,有更好的方法来创建没有循环的数组。上面只是一个逐个填充数组的例子一)。
string
容器也可以与character arrays 和cell arrays of chars 相互转换。
【讨论】:
以上是关于将字符串附加到 Matlab 数组的主要内容,如果未能解决你的问题,请参考以下文章
你能用 swift 将字符串附加到 Firebase 数组吗