2015-02-05 71 views
0

我有一个numpy的阵列像这样子阵,NumPy的:扩大更大的阵列

[[1 2 3 
    2 0 0 
    3 0 0]] 

,我希望把它变成这种形式,

[[1 2 2 3 3 
    2 0 0 0 0 
    2 0 0 0 0 
    3 0 0 0 0 
    3 0 0 0 0]] 

我的想法是提取子-array包含原始数组中的零,并使用Kronecker产品获取我想要的数组中的子数组。但我不知道得到输出数组的第一行和第一列。

如何实现这一目标?请给我任何建议。

+0

我按照您在问题中提出的建议调整了标题 - 如果您觉得它不符合您的要求,请随时将其更改或进一步改进。 – 2015-02-05 15:29:19

回答

3

另一种方法是使用np.repeat。如果arr是您的3×3阵列:

>>> arr.repeat([1, 2, 2], axis=0).repeat([1, 2, 2], axis=1) 
array([[1, 2, 2, 3, 3], 
     [2, 0, 0, 0, 0], 
     [2, 0, 0, 0, 0], 
     [3, 0, 0, 0, 0], 
     [3, 0, 0, 0, 0]]) 

例如,arr.repeat([1, 2, 2], axis=0)意味着arr第一行重复一次,第二行重复两次和第三行被重复三次。

然后对列进行同样的操作。

+0

感谢您回答我这个有用的答案,但是如果输入数组中有很多行,比如20,那么通过使用这些代码来获取输出数组将会很不方便。 而我仍在考虑如何解决这个问题。 – Heinz 2015-02-05 16:25:13

+1

@ Heinz:如果'arr'有20行,例如'arr.repeat([1] + [2] * 19,axis = 0)''可以总是重复第一行两行之后的每一行。 – 2015-02-05 16:42:24