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”,在第二行存储值(在程序的稍后部分)。我也知道我可以在数组中添加另一行而不是在初始化时执行此操作。但我宁愿不这样做,因为我听说效率很低,而且这个程序的成功在很大程度上取决于性能。
谢谢。
答案 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)
不需要将2D数据放入2D数组的列中。你只需要1D数据。
如果更改内存组织,则可以将数据放入第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.]]