用向量MATLAB替换矩阵元素

时间:2016-10-18 11:15:01

标签: matlab matrix

我有以下字符串矩阵:

encodedData=[1 0 1 1]

我想创建一个新的Matrix“mananalog”,用[1 1 1 1]替换encodedData items = 1,用[-1 -1 -1 -1]替换0,

最终矩阵的mananalog将是:[1 1 1 1 -1 -1 -1 -1 1 1 1 1 1 1 1 1]

我尝试使用以下代码:

mananalog(find(encodedData=='0'))=[num2str(1*(-Vd)) num2str(1*(-Vd)) num2str(1*(-Vd)) num2str(1*(-Vd))];
mananalog(find(encodedData=='1'))=[num2str(1*(Vd)) num2str(1*(Vd)) num2str(1*(Vd)) num2str(1*(Vd))];

VD = 0.7

然而,我有以下错误:

In an assignment  A(I) = B, the number of elements in B and I must be the same.

你知道这个功能吗? (不用于)

2 个答案:

答案 0 :(得分:3)

您可以像这样使用regexprepstrrep

encodedData='1 0 1 1'
regexprep(regexprep(encodedData, '1', '1 1 1 1'),'0','-1 -1 -1 -1')
ans =
1 1 1 1 -1 -1 -1 -1 1 1 1 1 1 1 1 1

如果你使用两条线,它会更简单一些:

encodedDataExpanded = regexprep(encodedData, '1', '1 1 1 1');
encodedDataExpanded = regexprep(encodedDataExpanded , '0', '-1 -1 -1 -1')

这将首先在字符串中搜索字符'1',并将其替换为字符串:'1 1 1 1'。然后,它搜索'0'并将其替换为字符串'-1 -1 -1 -1'

使用整数,而不是字符:

encodedData = [1 0 1 1];
reshape(bsxfun(@minus, 2*encodedData, ones(4,1)), 1, [])
ans =    
   1   1   1   1  -1  -1  -1  -1   1   1   1   1   1   1   1   1

而且,如果您有MATLAB R2015a或更高版本,那么Luis在评论中提及repelem

repelem(2*encodedData-1, 4)

答案 1 :(得分:1)

如果您不想在字符串和数字之间进行转换,您也可以

>> kron(encodedData, ones(1,4)) + kron(1-encodedData, -ones(1,4))