我知道要在Matlab中生成块对角矩阵,命令会blkdiag生成这样一个矩阵:

现在我面临着产生相同的块对角矩阵,但也矩阵元素B_1,B_2,...,B_{n-1}在上斜,别处零:

PS我diag命令,使用diag(A,k)返回k对角线.我需要在矩阵中写入的内容,k> 0,而块矩阵,不仅是元素.
在Perl中,我使用unpack()函数将二进制数据解压缩为字节.到目前为止我得到了这个:
my $lenOverHead = 3;
my $lenWithoutOverheads = length($thing->{_raw}) - $lenOverHead;
my @AA;
for (my $i = 0; $i < $lenWithoutOverheads; $i++)
{
push (@AA, unpack('C', substr($thing->{_raw}, $lenOverHead+$i)));
}
Run Code Online (Sandbox Code Playgroud)
注意,这$thing->{_raw}只是一个包含二进制数据的字符串.
现在的问题是,是否有更好的(=更有效)/更好的方式来做map()或不相似,不需要for循环?
我尝试了以下方法:
my @BB = map { unpack('C', $_) } substr($thing->{_raw}, $lenOverHead);
Run Code Online (Sandbox Code Playgroud)
但当然它只解包第一个字节,而不是所有字节....
我想在 MATLAB 中绘制一条线,并以信号的灰色阴影 X% 偏差绘制。然后,我会绘制另一个信号并查看(视觉上)第二个信号有多少在灰色阴影区域之外。
我想获得帮助的任务是阴影区域:类似于下面附加的图像。

我知道类似的解决方案有errorbar,但我认为这是一个更清楚的情节想象。
例如,如果我有:
x = 0:0.1:10;
y = 1 + sin(x);
Run Code Online (Sandbox Code Playgroud)
的 5% 灰色阴影图y会是什么样子?(那个区域?)
我想使用Perl正则表达式从文件名中提取某些值.他们有以下(有效)名称:
testImrrFoo_Bar001_off
testImrrFooBar_bar000_m030
testImrrFooBar_bar231_p030
Run Code Online (Sandbox Code Playgroud)
从上面我想提取前三个数字(总是保证为3),以及字符串的最后一部分,在最后一个之后_(也就是off,或(m或p)后跟3个数字).所以我要提取的第一件事是3位数,第二位是字符串.
我推出了以下方法(我意识到这可能不是最优/最好的方法):
my $marker = '^testImrr[a-zA-z_]+\d{3}_(off|(m|p)\d{3})$';
if ($str =~ m/$marker/)
{
print "1=$1 2=$2";
}
Run Code Online (Sandbox Code Playgroud)
哪里只有$1一个有效的结果(即我想要的最后一点信息),但$2结果是空的.关于如何在中间获得这3位数的任何想法?