2017-07-19 69 views
0
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 

输出:1D numpy的阵列没有得到再成形为一个二维阵列式打印长度后阵

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”,在第二行(在程序的稍后一点)存储值。我也知道我可以添加另一行到数组,而不是在初始化时进行。但是我宁愿不这样做,因为我听说这样效率低下,而且这个计划的成功高度依赖于性能。

谢谢。

+0

你需要'np.arange(列).reshape(-1,列)'。 –

回答

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]]) 

当然你可以用ID的1排阵开始,但在稍后添加第二行时,无论如何都需要创建一个新数组。 np.append只是np.concatenate的变化形式。

但是从arange使2D阵列我喜欢:

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.这样的分配需要正确的维度配对。

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

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

计划:

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.]]