我想在特定索引中将基于numpy的矩阵插入列表。例如,以下代码(python 2.7)应该将列表[5,6,7]
插入到M
中的第二位:
M = [[0, 0], [0, 1], [1, 0], [1, 1]]
M = np.asarray(M)
X = np.insert(M, 1, [5,6,7])
print(X)
然而,这并没有输出我想要的东西。它通过将所有列表合并到一个列表中而导致矩阵M
变得混乱。如何在基于numpy的矩阵的任何位置添加任何列表?
谢谢
答案 0 :(得分:0)
In [80]: M = [[0, 0], [0, 1], [1, 0], [1, 1]]
...: M1 = np.asarray(M)
...:
列表插入:
In [81]: M[1:2] = [[5,6,7]]
In [82]: M
Out[82]: [[0, 0], [5, 6, 7], [1, 0], [1, 1]]
对比由原始M和修改后的M制作的数组:
In [83]: M1
Out[83]:
array([[0, 0],
[0, 1],
[1, 0],
[1, 1]])
In [84]: np.array(M)
Out[84]:
array([list([0, 0]), list([5, 6, 7]), list([1, 0]), list([1, 1])],
dtype=object)
第二个不是二维数组。
没有轴的 np.insert
会使事情发生变化(查看文档)
In [85]: np.insert(M1,1,[5,6,7])
Out[85]: array([0, 5, 6, 7, 0, 0, 1, 1, 0, 1, 1])
如果我指定一个轴,它会抱怨形状不匹配:
In [86]: np.insert(M1,1,[5,6,7],axis=0)
...
5071 new[slobj] = arr[slobj]
5072 slobj[axis] = slice(index, index+numnew)
-> 5073 new[slobj] = values
5074 slobj[axis] = slice(index+numnew, None)
5075 slobj2 = [slice(None)] * ndim
ValueError: could not broadcast input array from shape (1,3) into shape (1,2)
它会创建一个(1,2)形状的插槽来接收新值,但[5,6,7]不适合。
In [87]: np.insert(M1,1,[5,6],axis=0)
Out[87]:
array([[0, 0],
[5, 6],
[0, 1],
[1, 0],
[1, 1]])