【发布时间】:2012-05-10 15:39:28
【问题描述】:
知道了向量的多维数组的形状,我们如何将它转换成一个新的一维向量(通过展平多维数组)?
例如考虑以下数组:
arr = [
[
[ nil, nil ],
[ nil, nil ],
[ nil, nil ]
],
[
[ nil, nil ],
[ nil, nil ],
[ nil, nil ]
]
]
arr[0][0][0] = "A"
arr[1][0][1] = "B"
arr # =>
[
[
[ "A", nil ],
[ nil, nil ],
[ nil, nil ]
],
[
[ nil, "B" ],
[ nil, nil ],
[ nil, nil ]
]
]
...其中A 是向量的起点,B 是向量的终点。可以写:
shape = [2, 3, 2]
vector = [1, 0, 1]
从现在开始,假设我们将arr 展平,我们如何翻译向量?换句话说,如何将这个 3 维向量转化为新的 1 维向量?
这是一种特殊情况,因为向量的原点也是数组的第一个坐标。所以我们可以找到结果:
arr.flatten.index("B") # => 7
这是另一个二维数组的例子:
arr = [
[ "A", nil ],
[ "B", nil ],
[ nil, nil ],
[ nil, nil ],
[ nil, nil ]
]
我们可以这样写:
shape = [2, 5]
vector = [1, 0]
再一次,
arr.flatten.index("B") # => 2
但这里有一个更复杂的例子,带有一个负向量:
arr = [
[ "B", nil ],
[ "A", nil ],
[ nil, nil ],
[ nil, nil ],
[ nil, nil ]
]
shape = [2, 5]
vector = [-1, 0]
下面的方法怎么写?
vector2index(shape, vector) # => -2
一维数组的示例(简单):
arr = [ nil, "B", nil, nil, "A", nil, nil ]
shape = [7]
vector = [-3]
vector2index(shape, vector) # => -3
有没有一种简单的方法可以从任意维度的数组中扁平化一个向量?谢谢。
【问题讨论】:
-
能否给个相关的链接来解释vector2index函数。
-
有没有简单的方法来解释你的问题?谢谢。
-
@nightf0x & marc-andre-lafortune,感谢您的 cmets。我只是重写了我的问题,试图更清楚。
标签: ruby arrays vector multidimensional-array narray