浮云间
将[7,8,9]写入第一列的2种方法:基本索引(带切片):In [396]: target[:,0] = [7,8,9] # all rows, 1st columnIn [397]: targetOut[397]: array([[7, 1], [8, 2], [9, 3]])高级索引(带有2个列表)In [398]: target[[0,1,2],[0,0,0]] = [7,8,9] # pair [0,0],[1,0],[2,0]In [399]: targetOut[399]: array([[7, 1], [8, 2], [9, 3]])第二种方法也适用于混合列:In [400]: target = np.array( [ [0,1],[1,2],[2,3] ])In [401]: target[[0,1,2],[0,1,0]] = [7,8,9]In [402]: targetOut[402]: array([[7, 1], [1, 8], [9, 3]])广播发挥作用。在这种情况下,有3个可能要广播的数组-2维和源数组。像这样的高级索引将生成一维数组。因此,源数组必须匹配:In [403]: target[[0,1,2],[0,1,0]]Out[403]: array([7, 8, 9])(1,3)可以广播到(3,),但是(3,1)不能:In [404]: target[[0,1,2],[0,1,0]] = np.array([[7,8,9]])In [405]: target[[0,1,2],[0,1,0]] = np.array([[7,8,9]]).T...ValueError: shape mismatch: value array of shape (3,1) could not be broadcast to indexing result of shape (3,)这种索引是不寻常的。请注意,结果为(3,3)。In [412]: target[:,[0,0,0]]Out[412]: array([[0, 0, 0], [1, 1, 1], [2, 2, 2]])(3,1)来源:In [413]: np.array([[7,8,9]]).TOut[413]: array([[7], [8], [9]])In [414]: target[:,[0,0,0]] = _In [415]: targetOut[415]: array([[7, 1], [8, 2], [9, 3]])(3,1)可以广播到(3,3)。它可以工作,但最终将[7,8,9]分配了3次,全部分配给相同的0列。分配第一列的另一种方法:In [423]: target[np.ix_([0,1,2],[0,0,0])]Out[423]: array([[0, 0, 0], [1, 1, 1], [2, 2, 2]])同样,(3,3)与接受(3,1):In [424]: target[np.ix_([0,1,2],[0,0,0])] = np.array([[7,8,9]]).TIn [425]: targetOut[425]: array([[7, 1], [8, 2], [9, 3]])ix_ 制作2个可以互相广播的数组,在这种情况下为列向量和第1行:In [426]: np.ix_([0,1,2],[0,0,0])Out[426]: (array([[0], [1], [2]]), array([[0, 0, 0]]))我可以选择targetwith的所有元素:In [430]: target[np.ix_([0,1,2],[0,1])]Out[430]: array([[0, 1], [1, 2], [2, 3]])并按照混乱的顺序排列:In [431]: target[np.ix_([2,0,1],[1,0])]Out[431]: array([[3, 2], [1, 0], [2, 1]])