如何a然后它然后又在

我在使用矩阵乘法和重塑时遇到问题。 例如,我有一个大小为 (16,1) 的列 S 和另一个大小为 (4,4) 的矩阵 H,我需要将 S 列重塑为 (4,4) 以便将其与 H 相乘,然后进行重塑再次到(16,1),我这样做了:

全部清除; clc; 清除

H = randn(4,4,16) + 1j.*randn(4,4,16);

S = randn(16,1) + 1j.*randn(16,1);

对于 ij = 1 : 16

y(:,:,ij) = (H(:,:,ij)*(S,4,[]),[],1);

结尾

y = 均值(y,3);

来:

numpy 作为 np

H = np..randn(4,4,16) + 1j * np..randn(4,4,16)

S = np..randn(16,) + 1j * np..randn(16,)

y = np.zeros((4,4,16),dtype=)

对于范围 (16) 内的 ij:

y[:,:,ij] = np.(h[:,:,ij]@S.(4,4),16,1)

但在这里我收到一个错误,我们无法将大小为 256 的矩阵 y 重塑为 16×1。

有谁知道如何解决这一问题?

只需这样做:

S.形状 = (4,4)

对于范围 (16) 内的 ij:

y[:,:,ij] = H[:,:,ij] @ S

S.shape = -1 # 到 16

如果两个操作数有两个或多个轴,则 np.dot 对两个操作数的最后一个轴和倒数第二个轴进行操作。 您可以移动轴来使用它。

请记住, (S, 4, 4) in 可能相当于 S.(4, 4).T in 。

因此,给定形状为 (4, 4, 16) 的 H 和形状为 (16,) 的 S,您可以使用

将 H 的每个通道乘以重塑后的 S

np.(np.dot(np.(H, -1, 0), S.(4, 4).T), 0, -1)

内部调用使 H 变为 (16, 4, 4) 进行乘法。 外面的效果是相反的。

或者,您可以使用 S ,它将被转置为

事实

np.(S.(4, 4), np.(H))

您的解决方案有两个问题

1) 该方法采用单个元组参数的形式,而不是多个参数。

2) y 数组的形状应该是 ,但不是。 在 中,没有问题,因为更新时它会自动重塑 y 。

正确版本如下:

numpy 作为 np

H = np..randn(4,4,16) + 1j * np..randn(4,4,16)

S = np..randn(16,) + 1j * np..randn(16,)

y = np.zeros((16,1,16),dtype=)

对于范围 (16) 内的 ij:

y[:,:,ij] = np.(H[:,:,ij]@S.((4,4)),(16,1))

好了,今天的主题就讲到这里吧,不管如何,能帮到你我就很开心了,如果您觉得这篇文章写得不错,欢迎点赞和分享给身边的朋友。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注