NMatrix划分具有不同形状的阵列

时间:2016-03-07 03:55:20

标签: ruby nmatrix

我有像这样的NMatrix数组

x = NMatrix.new([3, 2], [3, 5, 5, 1, 10, 2], dtype: :float64)

我想将每列除以列中的最大值。

使用numpy这就像这样实现

Y = np.array(([3,5], [5,1], [10,2]), dtype=float)
Y = Y / np.amax(Y, axis = 0)

但是当我尝试这个

时,NMatrix会抛出此错误
X = X / X.max
The left- and right-hand sides of the operation must have the same shape. (ArgumentError)

修改

我正在尝试关注this tutorial。为了扩展输入,教程将每列除以该列中的最大值。我的问题是如何使用nmatrix实现该步骤。

我的问题是如何与NMatrix实现相同的目标。

谢谢!

3 个答案:

答案 0 :(得分:2)

有几种方法可以完成您尝试的操作。可能最直接的是这样的事情:

x_max = x.max(0)
x.each_with_indices do |val,i,j|
  x[i,j] /= x_max[j]
end

你也可以这样做:

x.each_column.with_index do |col,j|
  x[0..2,j] /= x_max[j]
end

可能稍快一点。

答案 1 :(得分:1)

通用的面向列的方法:

> x = NMatrix.new([3, 2], [3, 5, 5, 1, 10, 2], dtype: :float64)

> x.each_column.with_index do |col,j|
    m=col[0 .. (col.rows - 1)].max[0,0]
    x[0 .. (x.rows - 1), j] /= m
  end

> pp x

[
  [0.3, 1.0]   [0.5, 0.2]   [1.0, 0.4] ]

答案 2 :(得分:0)

感谢您的回答!

我使用以下代码段工作了。

x = x.each_row.map do |row|
  row / x.max
end

我真的不知道这是多么有效,但只是想分享它。