我如何将(100,)到(250,100)的Numpy数组重塑

时间:2018-11-21 01:27:31

标签: python numpy

想象一下,您创建了一个具有100个维度的数组,然后计算了一些内容并填充了该数组。出于某种原因,您尚未创建2d数组,您想为该数据分配另一个维度的问题是什么呢?有理由说,例如250个样本应具有此计算出的数据?!

我已经搜索过此文件,但找不到任何解决方案。也许我搜索的关键词不正确!

实际上,我想将(100,)的numpy数组重塑为(250,100)。 我已经阅读了link和其他两个链接,但对我没有帮助。

我也尝试过这种方式:

numpyarray = (100,)
transformed_numpyarray = np.reshape(numpyarray,(100,-1)).T

这给了我这个输出:

(1, 100)

但是我真的不希望1作为2d数组的第一项。 我想做的是要么转换为(,100),要么至少转换为类似的(250,100)。 “ 250”是一个我已经知道的常数,所以我想说250个100维样本。

谢谢。

2 个答案:

答案 0 :(得分:1)

numpy的数组是静态大小的,不能有形状可变的数组。如果您事先不知道会有多少个样本,可以使用vstack逐渐添加它们:

In [4]: numpyarray.shape                                                        
Out[4]: (3, 4)

In [5]: new_sample.shape                                                        
Out[5]: (4,)

In [6]: numpyarray = np.vstack([numpyarray, new_sample])                        

In [7]: numpyarray.shape                                                       
Out[7]: (4, 4)

您还可以先通过创建一个由零组成的数组来定义大小,然后逐渐将其填充样本。

numpyarray = np.zeros((250,100))
...
numpyarray[i] = new_sample

答案 1 :(得分:1)

我仍然对您要做什么感到困惑。到目前为止,我可以想象两个选择-重塑和重复。为了说明:

In [148]: x = np.arange(16)
In [149]: x
Out[149]: array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15])

In [150]: x.reshape(4,4)
Out[150]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

In [151]: np.repeat(x[None,:], 4, axis=0)
Out[151]: 
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15],
       [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15],
       [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15],
       [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15]])