【发布时间】:2012-09-15 01:29:30
【问题描述】:
鉴于以下代码,我希望最后两行的行为相同,但事实并非如此。
import numpy as np
C = np.matrix(np.zeros((4,4)))
C[0, 0:2] = np.matrix([[1, 2]]) # Works as expected.
C[0, [0,1]] = np.matrix([[1, 2]]) # Throws an "array is not broadcastable to correct shape" error.
当使用 ndarray 代替时,事情会按预期工作(将分配的右侧调整为一维 ndarray):
D = np.zeros((4,4))
D[0, 0:2] = np.array([1, 2]) # Works as expected.
D[0, [0,1]] = np.array([1, 2]) # Works too.
让事情变得更奇怪的是,如果只是索引矩阵C(而不是分配给它),似乎使用切片索引或列表只会返回相同的结果:
C[0, 0:2] # => matrix([[ 1., 2.]])
C[0, [0, 1]] # => matrix([[ 1., 2.]])
问题是,为什么这两种分配方法的行为不同?我错过了什么?
(编辑:错字)
【问题讨论】: