【问题标题】:Populate array from vector从向量填充数组
【发布时间】:2010-04-26 13:58:01
【问题描述】:

我想从一个向量填充一个二维数组。

我认为解释自己的最佳方式是举一些例子(数组长度为 [3,5])。

当向量为:[1, 0]

[
  [4, 3, 2, 1, 0],
  [4, 3, 2, 1, 0],
  [4, 3, 2, 1, 0]
]

当向量为:[-1, 0]

[
  [0, 1, 2, 3, 4],
  [0, 1, 2, 3, 4],
  [0, 1, 2, 3, 4]
]

当向量为:[-2, 0]

[
  [0, 0, 1, 1, 2],
  [0, 0, 1, 1, 2],
  [0, 0, 1, 1, 2]
]

当向量为:[1, 1]

[
  [2, 2, 2, 1, 0],
  [1, 1, 1, 1, 0],
  [0, 0, 0, 0, 0]
]

当向量为:[0, 1]

[
  [2, 2, 2, 2, 2],
  [1, 1, 1, 1, 1],
  [0, 0, 0, 0, 0]
]

您有什么想法、一个好的图书馆或计划吗? 欢迎任何cmets。谢谢。

注意:我咨询了 Ruby “Matrix” 和 “Vector” 类,但我看不出有什么方法可以以我的方式使用它...

编辑:其实每个值都是按照给定向量计算的单元格数(从当前单元格到最后一个单元格)。

如果我们以向量为 [-2, 0] 的例子为例,其值为 *1*(在数组 [2, 3] 处):

array = [
  [<0>, <0>, <1>, <1>, <2>],
  [<0>, <0>, <1>, <1>, <2>],
  [<0>, <0>, <1>, *1*, <2>]
]

...我们可以这样想:

向量 [-2, 0] 表示 -2 是 cols 和 0 是行。所以如果我们 在数组 [2, 3] 中,我们可以移动 1 次 在左边(左边,因为 2 是 负数),长度为 2(因为 -2.abs == 2)。而且我们不会在顶部或底部移动,因为 0 表示 行。

【问题讨论】:

  • 我不了解 Ruby,但这似乎不是任何语言的标准库中都能找到的那种东西。我想您可能必须编写自己的算法。
  • 你能解释一下生成数组的规则吗?这些是唯一可能的向量值吗?

标签: ruby math arrays vector multidimensional-array


【解决方案1】:

这很容易实现:

require 'matrix'

def build(rows, cols, vector)
  Matrix.build(rows, cols){|i, j| vector.inner_product([cols-j-1, rows-i-1]) }
end

build(3, 5, Vector[1, 0]) # => your first example
# ...
build(3, 5, Vector[0, 1]) # => your last example

您将需要latest Matrix library,它介绍了Matrix.build

注意:我觉得你的例子有点奇怪,第三个更奇怪。看起来我们必须除以你给出的向量,除非它是 0?无论如何,只需将块调整为您需要的公式。

【讨论】:

  • 哇!似乎很神奇。我将更新到 1.9 并尝试您的代码。非常感谢!!
  • 您也可以只复制库并包含它而不是内置库。有机会我会尽快将 lib 移植到 1.8 行。
【解决方案2】:

好吧,我有点困惑,但我会在黑暗中拍摄

你想要的是遍历数组中的每个点并调用一个函数来计算该位置的值

所以我们有 循环我 循环 j 数组[i,j]=向量函数(i,j,vector); 下一个 j 接下来我

函数(i,j,向量) 在这里,我猜您以某种方式使用数组中的位置以及向量定义的线的斜率。我无法从数据中提取什么,但我确信存在这样的功能。
这很可能涉及 arccos 来获得角度。然后返回 i*arcsin+j+arccos

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 2011-09-21
    • 2017-01-07
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多