【问题标题】:Creating a matrix of arbitrary size where rows sum to 0创建一个任意大小的矩阵,其中行总和为 0
【发布时间】:2019-05-25 03:15:24
【问题描述】:

Creating a matrix of arbitrary size where rows sum to 1? 开始,我们可以通过将矩阵中的每个值除以所有值的总和来简单地对值进行归一化,以确保其总和为 1。

例如:

cols, rows = 5, 5
matrix = np.random.rand(rows, cols)
matrix/matrix.sum(axis=1)[:,None]

如何创建行和为 0 的任意大小的矩阵?

我试过了:

cols, rows = 5, 5
x = np.random.rand(rows, cols)
z = x - sum(sum(x)) / (rows*cols)

它是一个接近于零但从不求和为零的数字 =(

【问题讨论】:

  • 我认为如果您使用浮点数,由于数字舍入错误,您将永远不会完全为 0。一种解决方案是使用整数。您是否有理由需要它恰好为 0 而不是数字上的 0?
  • 另外,在您的上例中,每一行的总和为 1,而不是整个矩阵的总和为 1。

标签: python numpy matrix determinants


【解决方案1】:

您从自身中减去 x 的平均值以创建 z,这将为您提供一个总和为 0 的矩阵。要使行总和为零,您必须从中的每个元素中减去一行的平均值那一行。

cols, rows = 5, 5
x = np.random.rand(rows, cols)
z = (x - np.average(x,axis=0)).T

此代码查找列的平均值并减去它们,因为从二维数组中减去一维数组时,将从每一行中减去一维数组。这给出了一个列总和为零的矩阵,因此转置给出了一个行总和为零的矩阵。

正如 Tyler Chen 所说,由于舍入误差,您不会得到精确的 0,但这会让您接近。

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多