2017-06-03 90 views
-2

我知道有几个问题已经被问及numpy.resize(array,new_size),但它对我没有任何帮助。现在,我有x_array.shape ==(1456,26)和x_array.shape ==(1456,1)。我需要一种让他们的形状平等的方式。我试过np.resize(x_array,y_array.shape),但它没有做任何事情(没有错误,没有改变)。是否有可能改变这样的形状?两者都是numpy.ndarray类型。谢谢。我无法调整大小numpy.ndarrays

+0

我认为你正在寻找'reshape'。 – ForceBru

+0

重塑给我这个错误:“ValueError:无法重新塑造大小为1456的数组(1456,26)” – Derek

+0

为什么你想让他们的形状相等?在操作中使用?如果是这样,他们在一个轴上匹配,所以这可以很容易地完成。请注意,无法添加数据,您无法从(1456,1)更改为(1456,26)。但是,您可以添加一个额外的轴来处理。 – ayhan

回答

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 

将需要将调整大小的数组分配给一个新的数组。

0

虽然在技术上可以调整大小与numpy.resize一个numpy的阵列(见this answer,例如),它通常是更方便地使用功能强大的numpy array indexing实现转化的ndarray的形状相同的目标。

所以,如果你的问题是

I need a way to make their shapes equal,

有两种可能的解决方案:

  • 要扩展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形状变得真正相等。