如何获得一个np数组的形状(32,224,224),其中[0]包含(244,224)1和[1]只有2?

时间:2018-01-11 11:09:50

标签: python arrays python-3.x numpy

所以我需要一个形状的数组(32,224,224),其中[0]只包含1个[1]只包含2个等等。我能想到的唯一一个是将数组1:32并堆叠32次。我怎样才能更有效地做到这一点? (我正在使用python 3)

3 个答案:

答案 0 :(得分:2)

我不确定这是否是最优雅的,但看看这是否能为您提供所需的输出:

import numpy as np

myarray = (np.ones([32,264,264]).T * np.arange(1,33)).T

输出:

print(myarray)

[[[  1.   1.   1. ...,   1.   1.   1.]
  [  1.   1.   1. ...,   1.   1.   1.]
  [  1.   1.   1. ...,   1.   1.   1.]
  ..., 
  [  1.   1.   1. ...,   1.   1.   1.]
  [  1.   1.   1. ...,   1.   1.   1.]
  [  1.   1.   1. ...,   1.   1.   1.]]

 [[  2.   2.   2. ...,   2.   2.   2.]
  [  2.   2.   2. ...,   2.   2.   2.]
  [  2.   2.   2. ...,   2.   2.   2.]
  ..., 
  [  2.   2.   2. ...,   2.   2.   2.]
  [  2.   2.   2. ...,   2.   2.   2.]
  [  2.   2.   2. ...,   2.   2.   2.]]

 [[  3.   3.   3. ...,   3.   3.   3.]
  [  3.   3.   3. ...,   3.   3.   3.]
  [  3.   3.   3. ...,   3.   3.   3.]
  ..., 
  [  3.   3.   3. ...,   3.   3.   3.]
  [  3.   3.   3. ...,   3.   3.   3.]
  [  3.   3.   3. ...,   3.   3.   3.]]

 ..., 
 [[ 30.  30.  30. ...,  30.  30.  30.]
  [ 30.  30.  30. ...,  30.  30.  30.]
  [ 30.  30.  30. ...,  30.  30.  30.]
  ..., 
  [ 30.  30.  30. ...,  30.  30.  30.]
  [ 30.  30.  30. ...,  30.  30.  30.]
  [ 30.  30.  30. ...,  30.  30.  30.]]

 [[ 31.  31.  31. ...,  31.  31.  31.]
  [ 31.  31.  31. ...,  31.  31.  31.]
  [ 31.  31.  31. ...,  31.  31.  31.]
  ..., 
  [ 31.  31.  31. ...,  31.  31.  31.]
  [ 31.  31.  31. ...,  31.  31.  31.]
  [ 31.  31.  31. ...,  31.  31.  31.]]

 [[ 32.  32.  32. ...,  32.  32.  32.]
  [ 32.  32.  32. ...,  32.  32.  32.]
  [ 32.  32.  32. ...,  32.  32.  32.]
  ..., 
  [ 32.  32.  32. ...,  32.  32.  32.]
  [ 32.  32.  32. ...,  32.  32.  32.]
  [ 32.  32.  32. ...,  32.  32.  32.]]]


print(myarray.shape):

(32, 264, 264)

答案 1 :(得分:2)

不是创建一个需要占用大量内存的大型数组,而是广播乘法:

weights = np.arange(1,33)
arr = np.random.rand(32, 224, 224)

而不是这个(使用@ ken的解决方案):

warr1 = (np.ones([32,264,264]).T * weights).T * arr

这样做:

warr2 = weights[:, None, None] * arr

np.allclose(warr1, warr2)
Out: True

答案 2 :(得分:0)

你可以遍历数组吗?

import numpy as np
a = np.zeros((32,224,224))
for i in range(32):
   a[i,:,:] = i+1