2

我有一堆定义为 2x2 NArrays 的点,我似乎无法弄清楚如何避免迭代。这是我的工作:

# Instantiate an example point
point = NArray[[4, 9], [1, 1]]
# Create a blank array to fill
possible_points = NArray.int(2, 2, 16)
possible_points.shape[0].times do |i|
  possible_points[i, 0, true] = point[i, 0]
end

这会创建一个看起来像的 NArray

[ [ [ 4, 9 ],
    [ 0, 0 ] ],
  [ [ 4, 9 ],
    [ 0, 0 ] ],
    ...

在最后一个维度中的所有 16 个元素。

然而,我想要的是这样的:

possible_points[true, 0, true] = point[true, 0]

这种迭代有点违背了数值向量库的目的。它也是两行代码而不是一行。

本质上,第一个示例(有效的示例)让我在大小为 1,n 的 NArray 上分配一个数字。第二个示例(不工作的示例)返回一个错误,因为我试图将大小为 2 的 NArray 分配给大小为 2,n 的位置。

任何人都知道我怎样才能避免这样的迭代?

4

1 回答 1

2
point = NArray[[4, 9], [1, 1]]
=> NArray.int(2,2): 
[ [ 4, 9 ], 
  [ 1, 1 ] ]

possible_points = NArray.int(2, 2, 16)

possible_points[true,0,true] = point[true,0].newdim(1)

possible_points
=> NArray.int(2,2,16): 
[ [ [ 4, 9 ], 
    [ 0, 0 ] ], 
  [ [ 4, 9 ], 
    [ 0, 0 ] ], 
  [ [ 4, 9 ], 
    [ 0, 0 ] ], 
  [ [ 4, 9 ], 
    [ 0, 0 ] ], 
  [ [ 4, 9 ], 
    [ 0, 0 ] ], 
 ...

要将 shape-N narray 存储到 shape-NxM narray,请将 shape=[N] 转换为 shape=[N,1]。在 shape=[N,M] 和 shape=[N,1] 之间的操作中,重复使用 size=1 轴的元素。这是 NArray 的一般规则,也适用于算术运算。

于 2013-04-14T01:17:00.640 回答