了解向量的多维数组的形状,我们如何才能将它转换成一维的新载体(由扁平化多维数组)?
例如考虑下面的数组:
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个维度的该矢量转换成一维的一个新的?
这是一种特殊情况下,因为矢量的原点也是阵列的第一坐标。 因此,我们可以发现,其结果:
arr.flatten.index("B") # => 7
下面是与2D阵列的另一种示例:
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
一个例子(简单)用1D阵列:
arr = [ nil, "B", nil, nil, "A", nil, nil ]
shape = [7]
vector = [-3]
vector2index(shape, vector) # => -3
有一个简单的方法来平坦从任何尺寸的阵列的矢量? 谢谢。