创建一个矩阵,堆叠嵌套循环中矩阵的内容

问题描述 投票:0回答:1

嗨,我是 python 新手,遇到以下问题。

下面使用两个矩阵进行简化:

  • x 带有暗淡 6x4,并且
  • c 带有暗淡 4x4:

我想通过以下步骤得到一个 6 x 4 矩阵

  1. 取x的第一行,称之为j
  2. 通过取 j 中的每个列元素并减去它本身和 j 中的其他三个元素来创建一个 4 x 4 矩阵,对其他三个列元素执行此操作,然后将所得的 1x4 尺寸的四行堆叠在一起
  3. 将该矩阵乘以上述缩放矩阵 y 以创建一个具有相同 4X4 维度的新矩阵(例如 z)
  4. 对 z 中每列的行求和,将 z 缩减为 1 X 4 数组
  5. 对 x 的剩余 5 行中的每一行重复上述步骤 1 至 4
  6. 然后将得到的 6 个 z 矩阵(步骤 4 中的每个 1X4 暗矩阵)堆叠在一起形成 6X4
如果我的起始 x 矩阵是 1X4,我可以轻松执行步骤 1 到 4,例如:

x=np.array([[1,2,3,4]]) c=np.random.rand(4,4) y=np.zeros((4,4)) for i in range(4): j=x[0,i]-x y[i,:]=np.vstack(j) z=y*c weights=z.sum(axis=0)type here
但是,如果我尝试在嵌套循环中将其扩展为更大的维度 x(例如 6x4),则以下内容会出现在最后一行:

x=np.array([[1,2,3,4],[2,2,4,4],[0,5,3,4],[1,2,1,4],[1,0,3,4],[4,2,3,3]]) c=np.random.rand(4,4) y=np.zeros((4,4)) z_weights_time=np.zeros((6,4)) for s in range(6): d=x[[s],:] for i in range(4): j=d[0,i]-d y[i,:]=np.vstack(j) z=y*c z_weights=z.sum(axis=0) print("y= ",y) print("c= ",c) print("z_weights= ",z_weights) z_weights_time[s,:]=np.vstack(z_weights)
预先感谢您的任何建议。

python loops matrix
1个回答
0
投票
x 是一个 3d 数组。 可以说 c 不是随机的,而是按照下面的屏幕截图设置的。

然后使用您的代码和逻辑,这应该可以工作:

import numpy as np x=np.array([[[1,2,3,4]],[[2,2,4,4]],[[0,5,3,4]],[[1,2,1,4]],[[1,0,3,4]],[[4,2,3,3]]]) c=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]) y=np.zeros((4,4)) z_weights=np.zeros((6,4)) for row in range(6): for col in range(4): j=x[row,0,col]-x[row] print(f'x[row,0,col] - x[row] = {x[row,0,col]} - {x[row]} = {j}') y[col,:]=np.vstack(j) z=y*c print(f'z_weights@row{row}@row{row}=z.sum(axis=0 = {z.sum(axis=0)}') z_weights[[row],:] = z.sum(axis=0) print(f'z_weights = \n {z_weights}')
    
© www.soinside.com 2019 - 2024. All rights reserved.