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