在numpy.bincount()(ValueError)

时间:2017-09-09 16:34:49

标签: python arrays numpy

如果我使用b生成np.random.uniform()数组,我可以重塑它而不会出现任何问题(因此我可以将它乘以更大的数组a)。但是,如果我尝试使用b生成np.bincount()的同一行,我会得到一个

ValueError: cannot reshape array of size 7 into shape (20,)

甚至认为ab数组在两个块中都具有完全相同的形状。

import numpy as np

a = np.random.uniform(0., 1., 20)

# Works
b = np.random.uniform(0., 1., 7)
b.resize(a.shape)
d = b * a

# Does not work
c = [0, 4, 5, 4, 1, 3, 4, 5, 6, 6, 5, 6, 4, 6, 3, 1, 5, 4, 6, 0]
b = np.bincount(c)
b.reshape(a.shape)
d = b * a

1 个答案:

答案 0 :(得分:1)

NumPys resize可以更改元素总数。如果新形状较小,则会丢弃元素,并在新形状较大的情况下使用零填充元素(或者在使用resize函数时重复数组值)。因此,如果您将数组从7大小调整为大小20,则没有问题。

  

返回具有指定形状的新数组。

     

如果新数组大于原始数组,则新数组将填充a的重复副本。请注意,此行为与a.resize(new_shape)不同,后者填充零而不是a的重复副本。

但是reshape需要保持元素数量不变。这就是为什么你不能将长度为7的数组重新整形为大小为20的数组。

  

为数组提供新形状而不更改其数据。

reshape方法(和函数)也不会就地更改数组。只有resize 方法才会这样做(resize 功能也不会!)。

感谢@ user2357112指出这一点!