所需陣列與原始陣列a
的形狀不同。 因此,您不能通過使用簡單片 分配或單個調用分配函數(如numpy.place
,numpy.put
,numpy.putmask
, 或numpy.copyto
)來生成所需的陣列。
因此,我認爲 可能更好地把它看作是一個新數組的構造,而不是把它當作賦值和插入操作。 有很多方法可以做到這一點:
你可以使用numpy.concatenate
:
np.concatenate([a[:,:1], b, a[:,2:]], axis=1)
或numpy.column_stack
:
np.column_stack([a[:,:1], b, a[:,2:]])
或numpy.c_
:
np.c_[a[:,:1], b, a[:,2:]]
或numpy.bmat
:
np.array(np.bmat([a[:,:1], b, a[:,2:]]))
或空數組分配空間和賦值的c
片:
c = np.empty((a.shape[0], a.shape[1]+b.shape[1]-1), dtype=a.dtype)
c[:, :1] = a[:, :1]
c[:, 1:4] = b
c[:, 4:] = a[:, 2:]
這是沒有必要在這裏,但它是很好的保持在介意分配和分配是構建數組的可行方法。有時候,儘管不在這裏,它甚至是你最快的選擇。
或numpy.delete
和numpy.insert
:
np.insert(np.delete(a, [1], 1), [1], b, axis=1)
我不推薦使用insert
和delete
但是。 np.delete
創建一個 值從a
複製的新陣列。相反,切片a[:,:1]
和 a[:,2:]
是的意見的a
所以他們不需要任何複製。額外的 分配和複製使得該方法比上面顯示的其他方法 慢。
例如,如果我們定義:
import numpy as np
a = np.array([[ 0., 2., 0., 0., 0., 0.],
[ 0., 14., 0., 0., 0., 0.]])
b = np.array([(1, 0, 0),
(0, 0, 1)])
然後
In [69]: np.concatenate([a[:,:1],b,a[:,2:]], axis=1)
Out[69]:
array([[ 0., 1., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 1., 0., 0., 0., 0.]])
(其他選項產生相同的結果)
我會用切片和'place()',參見http://docs.scipy.org/doc/numpy/reference/generated/numpy.pl ace.html – madtowneast 2015-02-09 17:52:08
對於'2',您正在替換一個值。對於'14',你正在替換一個值(用0)並插入一個(2,2)數組。兩種不同的行爲。 – hpaulj 2015-02-09 20:35:44