gpt4 book ai didi

matlab - 将 (2×2) 矩阵中的每个元素扩展为 (3×2) block

转载 作者:行者123 更新时间:2023-12-02 14:06:20 25 4
gpt4 key购买 nike

我想使用 Python 3 --- 以及专业而优雅的代码,将 (2×2) 矩阵中的每个元素扩展为 (3×2) block 。由于我不知道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 block 。Y 中 block 的位置与 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));

感谢您的帮助。提前致谢。

最佳答案

如果您可以使用 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

关于matlab - 将 (2×2) 矩阵中的每个元素扩展为 (3×2) block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39051676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com