我有像这样的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实现相同的目标。
谢谢!
答案 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
我真的不知道这是多么有效,但只是想分享它。