如何将以下用于矩阵连接的matlab代码转换为python?
nr_a = 10;
nc_a = 23;
nr_b = 500;
a = zeros(nr_a, nc_a);
b = zeros(nr_b, nc_a - 1);
c = zeros(nr_b, 1);
d = [ a; b c];
在python中,d.shape应等于(nr_a + nr_b,nc_a)。 我不正确的python解决方案是
d = np.block([a, [b, c]])
答案 0 :(得分:3)
这应该可以解决问题。
import numpy as np
nr_a = 10
nc_a = 23
nr_b = 500
a = np.zeros((nr_a, nc_a))
b = np.zeros((nr_b, nc_a - 1))
c = np.zeros((nr_b, 1))
d = np.concatenate((a, np.concatenate((b, c), axis=1)))
答案 1 :(得分:2)
np.block
也需要您将a
包装在一个列表中,如下所示:
import numpy as np
nr_a = 10
nc_a = 23
nr_b = 500
a = np.zeros((nr_a, nc_a))
b = np.zeros((nr_b, nc_a - 1))
c = np.zeros((nr_b, 1))
d = np.block([[a], [b, c]])
print(d.shape)
输出:
(510, 23)
在内部,它仅递归使用concatenate
,但省却了您自己重复的麻烦(并且看起来更干净,适用于更大的用途)。