我知道有几个关于numpy.resize(array,new_size)的问题,但它没有为我做任何事情。现在,我有x_array.shape ==(1456,26)和x_array.shape ==(1456,1)。我需要一种方法来使他们的形状相等。我尝试了np.resize(x_array,y_array.shape),但它没有做任何事情(没有错误,没有变化)。是否有可能改变这样的形状?两者都是numpy.ndarray类型。谢谢。
答案 0 :(得分:1)
np.resize 返回具有指定形状的新数组。,因此x_array将保留(1456,26)。
x_array = np.ones([1456, 26])
print x_array
y_array = np.ones([1456, 1])
print y_array
new_array = np.resize(x_array, y_array.shape)
print new_array
需要将调整大小的数组分配给新数组。
答案 1 :(得分:0)
虽然技术上可以使用numpy.resize
调整numpy数组的大小(例如,参见this answer),但使用强大的numpy array indexing来实现相同的转换目标通常会更方便一个ndarray的形状。
所以,如果你的问题是
我需要一种使形状相等的方法,
有两种可能的解决方案:
您想要扩展y_array
。为此,只需创建一个新数组y_ext
,然后将y_array
中的元素复制到其中:
y_ext = numpy.zeros((1456,26)) # y_ext.shape == (1456,26)
y_ext[:,0] = y_array[:,0]
您想修剪x_array
。它甚至更简单:
x_trimmed = x_array[:,0] # x_trimmed.shape == (1456,)
y_trimmed = y_array[:,0] # y_trimmed.shape == (1456,)
请注意,在后一种情况下,x_trimmed
形状为(1456,)
,而不是(1456,1)
。这就是y_array
被“修剪”的原因(它变成了1-dim数组),因此x_trimmed
和y_trimmed
形状变得真正相等。