将字符串附加到 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 数组的主要内容,如果未能解决你的问题,请参考以下文章

将数组 int 附加到字符串数组

如何将部分字符数组附加到字符串?

你能用 swift 将字符串附加到 Firebase 数组吗

如何将字符串数组附加到共享内存? C

Java - 将引号附加到数组中的字符串并连接数组中的字符串

快速多部分/表单数据上传,将字符串数组附加到正文(问题:数组作为字符串到服务器)