我想取一个整数n
来定义我的通信代码中的位数和一个定义我分配给位0:n-1
的字母的向量,并输出一个包含该位的矩阵/单元数组每个州的字母表示法,即:
function M = mycommarray(3,[-1,1])
产生
M = [{-1,-1,-1}, {-1,-1,1}...]
我尝试使用dec2bin(0:7,3)
更轻松地执行此操作,但似乎没有一种快速方法可以将{0}变为-1
。
是否有预先包装的东西可以做到这一点?在这种情况下,我不希望任何人为我(与家庭作业相关)。
答案 0 :(得分:5)
dec2bin
实际上不是解决问题的最佳方法,因为它的结果是一个字符串数组(即一个字符矩阵),其中每个数字都是一个字符。如果您希望'-1'
表示逻辑“0”,那将是两个字符,并且会引入问题。
考虑使用bitget
的替代方法。利用Shai的建议,请执行以下操作:
[bits, values] = meshgrid(1:3, 0:7);
M = 2 * bitget(values, bits) - 1;
这将产生你想要的东西:
M =
-1 -1 -1
1 -1 -1
-1 1 -1
1 1 -1
-1 -1 1
1 -1 1
-1 1 1
1 1 1
答案 1 :(得分:1)
要轻松将零转换为-1
(并保留原样),您只需执行
minusOnes = 2 * zeroOnes - 1;
答案 2 :(得分:1)
你也可以这样做:
M = 2 * (dec2bin(0:7, 3)=='1')-1;
返回:
M =
-1 -1 -1
-1 -1 1
-1 1 -1
-1 1 1
1 -1 -1
1 -1 1
1 1 -1
1 1 1
然而,它变慢了。对于1024个值和10位,我得到0.0012s(dec2bin
)对0.0002s(meshgrid
+ bitget
)。