给定 10x10 矩阵 m:(10 10)#100?1f In kdb/q

given the 10x10 matrix m:(10 10)#100?1f In kdb/q

给定 10x10 矩阵 m:(10 10)#100?1

  1. 求矩阵每一行和每一列的平均值
  2. 求矩阵的平均值
  3. 从第一行取第一个元素,从第二行取第二个元素,依此类推
  4. 求矩阵的对角线元素

首先,我将更改输入,以便您可以更好地查看解决方案。 100?1 将给出 100 个 0 的列表,我认为这不是您想要的。也许您想要 100 个随机 (0;1) 或 100 个介于 0-1 之间的随机值。我选择了后者。

q)show m:(10 10)#100?1.
0.4655548 0.8455166  0.7281041 0.7403385 0.5199511  0.199172  0.9548708 0.498..
0.86544   0.3112134  0.3520122 0.4485896 0.6742543  0.2357538 0.7589261 0.318..
0.7053699 0.8153197  0.5051956 0.7546554 0.08613905 0.7824787 0.2080171 0.282..

所以,现在是问题。 计算矩阵每一行和每一列的平均值。

q)meanRows:avg each m
q)meanCols:avg each flip m

更新来自评论。您可以在不使用 each 或 flip 的情况下获得矩阵列的平均值,但如果任何元素为空,则 return 将为空。另一个注意事项是,如果列的长度为 10,则其中 5 个为空。那么 avg 只会考虑 5 个非空值的平均值。 因此,如果您认为存在空值,您可能希望去除它们然后获取平均值:

q)m:^[0;m] //Replace null with 0s if necessary
q)meanCols:avg m //Get avg without flipping or using each

求矩阵的平均值

q)avg avg each m

我认为 ^ 是获得总体平均值的最快方法,因为它不需要夷为平地或翻转。

从第一行取第一个元素,从第二行取第二个元素,依此类推

q)getVector:{[mtx]mtx'[c;c:til count mtx]}
q)getVector m
0.4655548 0.3112134 0.5051956 0.6333324 0.7258795 0.8671843 0.7556175 0.17954..

如果您还有其他问题,请告诉我。