在 ruby 中从矩阵中提取子矩阵的惯用方法是什么。
我有一个矩阵,这是 Matrix
的一个对象
[131, 673, 234, 103, 18]
[201, 96, 342, 965, 150]
[630, 803, 746, 422, 111]
[537, 699, 497, 121, 956]
[805, 732, 524, 37, 331]
我正在寻找一个带有类似签名的方法
matrix.submatrix(1,1)
这应该返回
[96, 342, 965, 150]
[803, 746, 422, 111]
[699, 497, 121, 956]
[732, 524, 37, 331]
matrix.submatrix(2,2)
会返回
[746, 422, 111]
[497, 121, 956]
[524, 37, 331]
我浏览了 rubydoc但找不到任何方法可以给我我想要的东西。我如何在 ruby 中执行此操作?
我想出了一个二维数组
def submatrix(matrix)
submatrix = matrix.collect{|row| row.slice(1..-1)}
# Pop off the first row
submatrix[1..-1]
end
我想知道我是否应该重新发明轮子,或者我是否可以使用 Matrix 类中的一些东西。
最佳答案
看看Matrix#minor :
a = [[131, 673, 234, 103, 18],
[201, 96, 342, 965, 150],
[630, 803, 746, 422, 111],
[537, 699, 497, 121, 956],
[805, 732, 524, 37, 331]]
m = Matrix[*a]
m1 = m.minor(1..4, 1..4)
=> Matrix[[96, 342, 965, 150], [803, 746, 422, 111],
[699, 497, 121, 956], [732, 524, 37, 331]]
m2 = m1.minor(1..3, 1..3)
=> Matrix[[746, 422, 111], [497, 121, 956], [524, 37, 331]]
您还可以:
m1 = m.minor(1..-1, 1..-1)
m2 = m1.minor(1..-1, 1..-1)
或者:
class Matrix
def submatrix(x, y)
self.minor(x..-1, y..-1)
end
end
m.submatrix(2, 2)
=> Matrix[[746, 422, 111], [497, 121, 956], [524, 37, 331]]
关于ruby - 如何从 ruby 中的矩阵中提取子矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23185773/