我希望将(2乘2)矩阵中的每个元素扩展为(3乘2)块,使用Python 3 ---使用专业而优雅的代码。由于我不知道python代码,我将在数学中描述以下内容
X = # X is an 2-by-2 matrix.
1, 2
3, 4
d = (3,2) # d is the shape that each element in X should be expanded to.
Y = # Y is the result
1, 1, 2, 2
1, 1, 2, 2
1, 1, 2, 2
3, 3, 4, 4
3, 3, 4, 4
3, 3, 4, 4
不是X中的每个元素现在都是Y中的3乘2块.Y中块的位置与X中元素的位置相同。
这是MATLAB代码
X = [1,2;3,4];
d = [3,2]
[row, column] = size(X);
a = num2cell(X);
b = cell(row, column);
[b{:}] = deal(ones(d));
Y = cell2mat(cellfun(@times,a,b,'UniformOutput',false));
感谢您的帮助。提前谢谢。
答案 0 :(得分:3)
如果你可以使用NumPy module
和Python,你可以使用numpy.kron
-
np.kron(X,np.ones((3,2),dtype=int))
示例运行 -
In [15]: import numpy as np
In [16]: X = np.arange(4).reshape(2,2)+1 # Create input array
In [17]: X
Out[17]:
array([[1, 2],
[3, 4]])
In [18]: np.kron(X,np.ones((3,2),dtype=int))
Out[18]:
array([[1, 1, 2, 2],
[1, 1, 2, 2],
[1, 1, 2, 2],
[3, 3, 4, 4],
[3, 3, 4, 4],
[3, 3, 4, 4]])
事实上,这是直接翻译如何以优雅和专业的方式在MATLAB
中实现所需的结果,如下所示 -
>> X = [1,2;3 4]
X =
1 2
3 4
>> kron(X,ones(3,2))
ans =
1 1 2 2
1 1 2 2
1 1 2 2
3 3 4 4
3 3 4 4
3 3 4 4
答案 1 :(得分:2)
使用ndarray.repeat
执行此操作的另一种方法:
>>> X = np.arange(4).reshape(2,2)+1
>>> X.repeat(3, axis=0).repeat(2, axis=1)
array([[1, 1, 2, 2],
[1, 1, 2, 2],
[1, 1, 2, 2],
[3, 3, 4, 4],
[3, 3, 4, 4],
[3, 3, 4, 4]])