我无法调整numpy.ndarrays的大小

时间:2017-06-03 18:36:07

标签: python arrays numpy

我知道有几个关于numpy.resize(array,new_size)的问题,但它没有为我做任何事情。现在,我有x_array.shape ==(1456,26)和x_array.shape ==(1456,1)。我需要一种方法来使他们的形状相等。我尝试了np.resize(x_array,y_array.shape),但它没有做任何事情(没有错误,没有变化)。是否有可能改变这样的形状?两者都是numpy.ndarray类型。谢谢。

2 个答案:

答案 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_trimmedy_trimmed形状变得真正相等。