我有以下字符串矩阵:
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))];
然而,我有以下错误:
In an assignment A(I) = B, the number of elements in B and I must be the same.
你知道这个功能吗? (不用于)
答案 0 :(得分:3)
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))