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