2016-12-06 64 views
0

我有一个涉及np.reshape的简单问题。我正在尝试学习如何使用np.reshape从一维数组创建二维数组。我看着这个教程,做它,但我仍然对本教程的一些问题..从1D阵列制作二维数组时,一个简单的numpy重塑函数

import numpy as np 

a = np.arange(8*16) 

frame_length = 8 

a_framed = np.reshape(a, (-1, frame_length)) 

print (a_framed) 

这里是我的问题:

  1. 是帧_确定新的二维数组中的列数?如果是这样,为什么不把数字8放在'a_framed'中?这是不可能的吗?
  2. 'a_framed'中的'-1'是什么?它有什么作用? (在教程中省略或对我来说不足)

谢谢! Cece

+0

看起来像是过度杀伤...考虑... b = np.arange(8 * 16).reshape(8,16)...注意,如果您使用n * m产生一个范围,您可以如果对(m,n)进行重塑并将其与重塑(n,m)进行比较。 (-1代替了重塑中的第一个术语,以任意数量来制作它)2D – NaN

+0

嗨!感谢您的回复。请您详细说明-1的作用?谢谢! –

+0

在您的示例中,np。 reshape需要数组'a'和形状,形状为(-1,frame_length)...因为指定了2个地方,所以你需要重塑为2D数组。现在,你只能重塑一个数组来匹配输入的大小是8 * 16 = 128。在整形中,第二项被指定为等于8 ... -1的frame_length,实际上意味着'不管需要'如何保持数组的大小与2D形状...在这种情况下...(16,8)size = np.prod(a.shape)。可以更改形状,如b = np.reshape(a,(2,2,4,8) ))查看相同数据的其他形状 – NaN

回答

0
  1. 是的。你可以。这是可能的,但该示例试图向您展示您在第2个问题中询问的功能。

  2. -1通常是python中的通配符。在这种情况下,它是a.size/frame_length,其他维度需要使用全部的a。将a_framed更改为4或16,它仍然有效。将其更改为5:

    Traceback (most recent call last): 
    
    File "", line 4, in <module> 
    a_framed = np.reshape(a, (-1, frame_length)) 
    
    File ". . . fromnumeric.py", line 225, in reshape 
    return reshape(newshape, order=order) 
    
    ValueError: total size of new array must be unchanged 
    

它不适合,所以numpy的抛出和错误。

相关问题