用矢量MATLAB代替矩阵元

用矢量MATLAB代替矩阵元,matlab,matrix,Matlab,Matrix,我有以下字符串矩阵: encodedData=[1 0 1 1] 我想创建一个新的矩阵“mananalog”,用[1]替换encodedData items=1,用[-1-1-1-1]替换0 最后的矩阵管理日志是:[1-1-1-1-1-1] 我已尝试使用以下代码: mananalog(find(encodedData=='0'))=[num2str(1*(-Vd)) num2str(1*(-Vd)) num2str(1*(-Vd)) num2str(1*(-Vd))]; mananalog(f

我有以下字符串矩阵:

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

最后的矩阵管理日志是:[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.
你知道这个功能吗?(不用于)

您可以这样使用:

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'
。然后它搜索
'0'
,并将其替换为字符串
'-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(2*encodedData-1, 4)
您可以使用或类似于此:

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'
。然后它搜索
'0'
,并将其替换为字符串
'-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(2*encodedData-1, 4)

如果不想在字符串和数字之间转换,也可以这样做

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

如果不想在字符串和数字之间转换,也可以这样做

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


它是字符串还是数组?如果在MATLAB中键入
+encodedData
会得到什么?@StewieGriffin encodedData是一个字符矩阵[1001001001100101010…]Vd的内容是什么?如果键入:
+encodedData(1:4)
,会得到什么?如果您提供这些信息,将非常有帮助……:)@bushmills Vd=0.7是字符串还是数组?如果在MATLAB中键入
+encodedData
会得到什么?@StewieGriffin encodedData是一个字符矩阵[1001001001100101010…]Vd的内容是什么?如果键入:
+encodedData(1:4)
,会得到什么?如果您提供这些信息,将非常有帮助……:)@bushmills Vd=0.7工作完美!谢谢你知道用整数代替字符串的方法吗?我的意思是,最终的矩阵将由整数组成。我尝试过使用regexprep,但它只适用于stringAwesome实现!;)工作完美!谢谢你知道用整数代替字符串的方法吗?我的意思是,最终的矩阵将由整数组成。我尝试过使用regexprep,但它只适用于stringAwesome实现!;)是的,我真傻
Replem
绝对是一种方式。是的,我太傻了
Replem
绝对是一种方法。