如果我使用b
生成np.random.uniform()
数组,我可以重塑它而不会出现任何问题(因此我可以将它乘以更大的数组a
)。但是,如果我尝试使用b
生成np.bincount()
的同一行,我会得到一个
ValueError: cannot reshape array of size 7 into shape (20,)
甚至认为a
和b
数组在两个块中都具有完全相同的形状。
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
答案 0 :(得分:1)
NumPys resize
可以更改元素总数。如果新形状较小,则会丢弃元素,并在新形状较大的情况下使用零填充元素(或者在使用resize
函数时重复数组值)。因此,如果您将数组从7大小调整为大小20,则没有问题。
返回具有指定形状的新数组。
如果新数组大于原始数组,则新数组将填充a的重复副本。请注意,此行为与a.resize(new_shape)不同,后者填充零而不是a的重复副本。
但是reshape
需要保持元素数量不变。这就是为什么你不能将长度为7的数组重新整形为大小为20的数组。
为数组提供新形状而不更改其数据。
reshape
方法(和函数)也不会就地更改数组。只有resize
方法才会这样做(resize
功能也不会!)。
感谢@ user2357112指出这一点!