在Python for循环中创建数组,但数据没有得到正确复制
所以我想创建一个具有特定形状的for循环中的数组。我从一个形状为(14616, 145, 192)
的3D数组开始,然后取出数据的平均值,并将其放入数组中。我期待在它得到一个一维数组14616个值使用下面的代码:在Python for循环中创建数组,但数据没有得到正确复制
data = np.zeros(14616)
for x in pr1: data = np.average(x)
当这样写新的阵列看起来像这样:
print data.shape print data () 2.37915e-05
无论出于何种原因,当这样写时,只需要计算最后的平均值并将其放入数组中,当我想要所有这些数值时。我弄了几个不同的东西,但似乎没有任何工作,我不知道它出错的地方。
您只需将您的mean
计算结果分配给data
即可。所以,如果我有x = [1,2,3]
,然后我x = 4
,然后x == 4
和原始列表被丢弃。
所以,当你说:
无论出于何种原因,这样当它只是服用计算,最后 平均值,并把该进阵列写...
这是错误的。它不是对数组做任何事情,它将在循环的每次迭代中将data
重新分配为np.average(x)
的值,因此,data
将是最后一次迭代中的任何np.average(x)
。
无论如何,我会完全放弃你的循环方法,而是使用内置的np.mean
,无论是函数还是方法。因此,使用玩具,例如:
>>> pr1 = np.random.randint(-5, 20, (8, 2, 3))
>>> pr1
array([[[16, 4, -5],
[ 5, 16, 7]],
[[13, 16, -3],
[12, 10, 14]],
[[13, -4, 12],
[-5, 12, 1]],
[[ 9, -1, -3],
[14, 11, 15]],
[[12, 17, 14],
[16, 5, 2]],
[[-1, 13, -2],
[ 4, 9, 11]],
[[12, 8, 19],
[ 4, 9, -2]],
[[-4, -2, 1],
[ 8, -1, 14]]])
>>>
然后简单:
>>> data = pr1.mean(axis=(1,2))
>>> data
array([ 7.16666667, 10.33333333, 4.83333333, 7.5 ,
11. , 5.66666667, 8.33333333, 2.66666667])
>>> data.shape
(8,)
>>> pr1.shape
(8, 2, 3)
>>>
@AlexMorrison为了充分利用'numpy',尝试学习使用内置的矢量化方法。它们被实现为C扩展,并且被编译并且比普通的python循环快得多。 –
在你的循环for x in pr1:
,你继续分配x的平均data
,因此最后data
只需要1倍的值。
您可以使用列表中理解和实现您的目标:
>>> data = np.random.rand(146,15,19)
>>> data = np.array([np.average(j) for j in data])
>>> data.shape
(146,)
这种方法也有效,但由于某种原因花了很长时间才能运行。 –
是的,因为你只是分配'np.average(X)'的结果'data',并丢弃您的阵列。 –