1D Numpy数组不会被重新整形为2D数组

时间:2017-07-19 20:09:19

标签: python arrays numpy

columns = np.shape(lines)[0]  # Gets x-axis dimension of array lines (to get numbers of columns)
lengths = np.zeros(shape=(2,1))  # Create a 2D array
# lengths = [[ 0.]
#            [ 0.]]
lengths = np.arange(columns).reshape((columns))  # Makes array have the same number of columns as columns and fills it with elements going up from zero <--- This line seems to be turning it into a 1D array

打印长度数组后的输出:

print(lengths)
[0 1 2]

预期输出示例:

print(lengths)
[[0 1 2]]  # Notice the double square bracket

这导致我无法将数据输入到数组的2D部分,因为它现在不再存在:

np.append(lengths, 65, axis=1)
AxisError: axis 1 is out of bounds for array of dimension 1

我希望数组为2D,因此我可以在第一行存储“ID”,在第二行存储值(在程序的稍后部分)。我也知道我可以在数组中添加另一行而不是在初始化时执行此操作。但我宁愿不这样做,因为我听说效率很低,而且这个程序的成功在很大程度上取决于性能。

谢谢。

2 个答案:

答案 0 :(得分:0)

由于你最终想要一个二维数组,其中一行中的ID和第二行中的值,我建议从正确的大小开始

In [535]: arr = np.zeros((2,10),int)
In [536]: arr
Out[536]: 
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
In [537]: arr[0,:]=np.arange(10)
In [538]: arr
Out[538]: 
array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])

当然你可以从1行的id数组开始,但是稍后添加第2行需要制作新的数组。 np.append仅是np.concatenate的变体。

但要从arange制作一个二维数组我喜欢:

In [539]: np.arange(10)[None,:]
Out[539]: array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])

reshape也有效,但必须给出正确的形状,例如(1,10)

在:

lengths = np.zeros(shape=(2,1))  # Create a 2D array
lengths = np.arange(columns).reshape((columns))

第二个lengths作业取代了第一个作业。您必须像对arr[0,:]那样修改现有数组,进行索引分配。 lengths[0,:] = np.arange(10)不起作用,因为lengths只有1列,而不是10。这样的分配需要正确的维度配对。

答案 1 :(得分:0)

  1. 不需要将2D数据放入2D数组的列中。你只需要1D数据。

  2. 如果更改内存组织,则可以将数据放入第0行而不是第0列。这是将数据复制到连续的内存(没有间隙的内存),而且速度更快。

  3. 程序:

    import numpy as np
    data = np.arange(12)
    
    #method 1
    buf = np.zeros((12, 6))
    buf[:,0] = data
    print(buf)
    
    #method 2
    buf = np.zeros((6, 12))
    buf[0] = data
    print(buf)
    

    结果:

    [[  0.   0.   0.   0.   0.   0.]
     [  1.   0.   0.   0.   0.   0.]
     [  2.   0.   0.   0.   0.   0.]
     [  3.   0.   0.   0.   0.   0.]
     [  4.   0.   0.   0.   0.   0.]
     [  5.   0.   0.   0.   0.   0.]
     [  6.   0.   0.   0.   0.   0.]
     [  7.   0.   0.   0.   0.   0.]
     [  8.   0.   0.   0.   0.   0.]
     [  9.   0.   0.   0.   0.   0.]
     [ 10.   0.   0.   0.   0.   0.]
     [ 11.   0.   0.   0.   0.   0.]]
    [[  0.   1.   2.   3.   4.   5.   6.   7.   8.   9.  10.  11.]
     [  0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.]
     [  0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.]
     [  0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.]
     [  0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.]
     [  0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.]]