Python Numpy:扩展较大阵列的子阵列

Python Numpy:扩展较大阵列的子阵列,python,arrays,numpy,Python,Arrays,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]] 我的想法是从原始数组中提取包含零的子数组,并使用Kronecker乘积得到子数组,它位于我想要的数组中。但是我不知道如何获取输出数组的第一行和第一列 如何实现这一目标?请给我任何建议。另一种方法是使用np。重复。如果arr是您的3x3阵列: >>>

我有一个这样的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]]
我的想法是从原始数组中提取包含零的子数组,并使用Kronecker乘积得到子数组,它位于我想要的数组中。但是我不知道如何获取输出数组的第一行和第一列


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

另一种方法是使用
np。重复
。如果
arr
是您的3x3阵列:

>>> 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
的第一行重复一次,第二行重复两次,第三行重复三次


然后对列执行相同的操作。

另一种方法是使用
np。重复
。如果
arr
是您的3x3阵列:

>>> 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
的第一行重复一次,第二行重复两次,第三行重复三次


然后对列执行相同的操作。

另一种方法是使用
np。重复
。如果
arr
是您的3x3阵列:

>>> 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
的第一行重复一次,第二行重复两次,第三行重复三次


然后对列执行相同的操作。

另一种方法是使用
np。重复
。如果
arr
是您的3x3阵列:

>>> 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
的第一行重复一次,第二行重复两次,第三行重复三次


然后对专栏做同样的事情。

我按照你在问题中的建议调整了标题-如果你觉得标题与你的要求不太相符,请随意更改或进一步改进。我按照你在问题中的建议调整了标题-如果你觉得合适,请随意更改或进一步改进标题不太符合你的要求。我按照你在问题中的建议调整了标题-如果你觉得它不符合你的要求,请随意更改或进一步改进。我按照你在问题中的建议调整了标题-如果你觉得不太符合,请随意更改或进一步改进符合你的要求。谢谢你回答我这个有用的答案,但是如果输入数组中有很多行,比如说20行,那么使用这些代码获取输出数组将很不方便。我还在考虑如何解决这个问题。@Heinz:如果
arr
有20行,你可以做,例如,
arr.repeat([1]+[2]*19,axis=0)
在第一行之后重复每行两次。谢谢你用这个有用的答案回答我,但是如果有很多行,比如说,输入数组中有20行,这将不方便通过使用这些代码获得输出阵列。我还在考虑如何解决这个问题。@Heinz:如果
arr
有20行,你可以做,例如,
arr.repeat([1]+[2]*19,axis=0)
在第一行之后重复每行两次。谢谢你用这个有用的答案回答我,但是如果有很多行,比如说,输入数组中有20行,这将不方便通过使用这些代码获得输出阵列。我还在考虑如何解决这个问题。@Heinz:如果
arr
有20行,你可以做,例如,
arr.repeat([1]+[2]*19,axis=0)
在第一行之后重复每行两次。谢谢你用这个有用的答案回答我,但是如果有很多行,比如说,输入数组中有20行,这将不方便通过使用这些代码获得输出阵列。我还在考虑如何解决这个问题。@Heinz:如果
arr
有20行,你可以做,例如,
arr.repeat([1]+[2]*19,axis=0)
在第一行之后重复每行两次。