Tag: 矩阵

如何在Ruby中制作可操作的数字网格

我想在Ruby中创建一个数字网格,提供这样的输出(不完全,但是关闭): 0 1 2 3 4 5 6 7 8 9 —————— 1 | 2 | 3 | 4 | 5 | 6 | 其中空格(坐标点)用随机数填充。 我还需要它可操作(例如,我可以很容易地找到一个点的值,给定它的坐标并改变它)。 我一直在尝试使用数组,但还没有找到一个很好的方法将它组合在一起。 如何使用Ruby以高效的方式执行此操作? 非常感谢! 更新:我有一个像这样的数组: $array = [ # 0 1 2 3 4 5 6 7 8 [‘O’, ‘-‘,’ -‘,’-‘, ‘-‘, ‘-‘, ‘-‘, ‘-‘, ‘-‘], #0 [‘|’, ‘x’,’x’,’x’, ‘x’, […]

是否有Ruby的数据库或数据结构来实现关系矩阵?

我有一个非常简单的数据集 制品 属性 交叉表:产品的属性相关性 red blue modern old fashion (50+ Entries) Jeans myway 0% 100% 30% 30% Polo Shirt 100% 0% 10% 40% (500+ Entries) 在应用程序中,您可以选择红色,蓝色,…等属性,并获取按相关性排序的产品。 存储数据的最佳方法是什么,ruby有一个很好的数据结构(库)吗? (不要告诉我如何使用传统的3表sql和活动记录来实现它。我已经知道了。我正在寻找更好的解决方案。) 一种方法可能是哈希: “red” => {“Jeans myway” => 0, “Polo Shirt” => 100}, “blue” => {.. 这是一个好方法,我应该如何将其存储到文件? [编辑]更好的解决方案:如果我采用关系数据库,我将矩阵拆分为3个表产品,属性,attributes_products。 我想将它存储在一个表/矩阵中,并像矩阵一样搜索/使用它。 例如,我想选择产品,其中“旧时尚”,“现代”属性相关的属性(> 0)按相关性排序将返回’Jeans myway 0.09’,’Polo Shirt 0.04’。 (相关性通过乘法计算。)

需要一种Ruby方法来确定矩阵“触摸”另一个元素的元素

我认为我需要一种叫做“触摸”的方法(如连续的,而不是情绪化的。)我需要识别矩阵中与单个元素或元素集相邻的元素。 至少那是我想到的解决手头问题的方式。 下面的程序中的矩阵状态代表了一些水下地形。 随着我降低水量,最终将最高点伸出并变成“岛屿”。 当“水位”为34时,元素状态[2,3]是岛的单点。 atlantis数组保存该单点的坐标。 随着我们进一步降低水位,额外的点将“高于水面”。其他连续点将成为岛屿的一部分,它们的坐标将被添加到arrays亚特兰提斯。 (例如,下一块属于亚特兰蒂斯的土地将是国家[3,4],即31。) 我对如何做到这一点的想法是识别接触/位于亚特兰蒂斯元素旁边的所有矩阵元素,找到具有最高高度的矩阵元素,然后将其添加到亚特兰提斯数组中。 寻找单个元素旁边的元素本身就是一个挑战,但我们可以编写一些代码来检查集合[i,j-1],[i,j + 1],[i-1,j-1] ,[i-1,j],[i-1,j + 1],[i + 1,j-1],[i + 1,J],[i + 1,j + 1]。 (我想我做对了。) 但是当我们添加额外的点时,确定围绕atlantis中的点的哪些点的任务变得越来越困难。 所以这是我的问题:任何人都可以想到这样做的机制吗? 使用我不知道的rubyfunction的任何一种简化算法? (包括除最基本以外的所有内容。)如果可以编写这样的方法,那么我可以编写atlantis.touching并获得一个数组,例如,包含目前与atlantis相邻的所有点的所有坐标。 至少我认为这可以做到这一点。 任何其他想法都会受到欢迎。 如果有人知道任何类型的合作网站,我可以寻找可能有兴趣与我合作的其他人,这将是伟大的。 # create State database using matrix require ‘matrix’ State=Matrix[ [3,1,4,4,6,2,8,12,8,2], [6,2,4,13,25,21,11,22,9,3,], [6,20,27,34,22,14,12,11,2,5], [6,28,17,23,31,18,11,9,18,12], [9,18,11,13,8,9,10,14,24,11], [3,9,7,16,9,12,28,24,29,21], [5,8,4,7,17,14,19,30,33,4], [7,17,23,9,5,9,22,21,12,21,], [7,14,25,22,16,10,19,15,12,11], [5,16,7,3,6,3,9,8,1,5] ] #find sate elements contiguous […]

Ruby Matrix类的复制/inheritance(core / std lib)

我试图在Ruby中扩展一个现有的Singleton类,作为Matrix类的一个例子。 我的第一个快速和肮脏的解决方案是一个猴子补丁(重新打开类并扩展function)。 但我认为,猴子修补一般不好,特别是如果有人试图覆盖核心类的基本方法,如String,Integer,…… 下一步是找出如何使用新名称(如MatrixExt)获取Matrix类的真实硬拷贝,该名称表现为独立的单例。 MatrixExt = Matrix 没有工作,因为它导致: MatrixExt.scalar(2,0) => Matrix[[0, 0], [0, 0]] 所以我只为同一个单身人士获得多个名字。 不,我想要的。 与clone和dup方法的结果相同。 类inheritance也不起作用: class MatrixExt Matrix[[0, 0], [0, 0]] 这是最令人困惑的部分,因为在自定义类中,可以获得inheritance的类。 (那么,为什么core / std lib类的工作方式不同?) 我目前的解决方案是使用扩展模块,然后在初始化后显式使用.extend ,如: m = Matrix.scalar(2,0).extend(MatrixExtModule) 现在没关系,但我的问题是: 是否有另一种解决方案 – 当是 – 如何做到这一点? (不,复制matrix.rb当然不是一个好方法。; o) 我做错了什么或我认为错误的方式? 提前感谢任何解决方案和/或食物的想法!

如何在Ruby中声明二维数组

我想在Ruby中使用二维数组,我可以像下面这样访问: if @array[x][y] == “1” then @array[x][y] = “0” 问题是:我不知道数组维度的初始大小,并且我增长了数组(使用<<运算符)。 如何将其声明为实例变量,所以我没有这样的错误? undefined method `[]’ for nil:NilClass (NoMethodError) 问题更新: @array = Array.new {Array.new} 现在对我有用,所以下面马特的评论是正确的! 我刚刚发现我收到错误的原因是因为我迭代了这个数组: for i in 0..@array.length for j in 0..@array[0].length @array[i][j] … 这显然是错误的,并产生了错误。 必须是这样的: for i in 0..@array.length-1 for j in 0..@array[0].length-1 @array[i][j] …

Ruby:条件矩阵? 有多种情况的情况?

在ruby中,我想知道是否有办法做到以下几点: 我基本上有一个包含四种可能结果的矩阵: A is True, B is True A is True, B is False A is False, B is True A is False, B is False 我想以最干净的“ruby方式”为此写一个测试。 我希望能做类似的事情 case[A,B] when A && B then … when A && !B then … when !A && B then … when !A && !B then … end ……但那不起作用。 […]