您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

计算矩阵未成年人的numpy例程?

计算矩阵未成年人的numpy例程?

In [34]: arr=np.random.random((4,4))

In [35]: arr
Out[35]: 
array([[ 0.00750932,  0.47917318,  0.39813503,  0.11755234],
       [ 0.30330724,  0.67527229,  0.71626247,  0.22526589],
       [ 0.5821906 ,  0.2060713 ,  0.50149411,  0.0328739 ],
       [ 0.42066294,  0.88529916,  0.09179092,  0.39389844]])

这给出了的未成年人arr,删除了第一行和第二列:

In [36]: arr[np.array([0,2,3])[:,np.newaxis],np.array([0,1,3])]
Out[36]: 
array([[ 0.00750932,  0.47917318,  0.11755234],
       [ 0.5821906 ,  0.2060713 ,  0.0328739 ],
       [ 0.42066294,  0.88529916,  0.39389844]])

因此,您可以使用以下方式:

def minor(arr,i,j):
    # ith row, jth column removed
    return arr[np.array(list(range(i))+list(range(i+1,arr.shape[0])))[:,np.newaxis],
               np.array(list(range(j))+list(range(j+1,arr.shape[1])))]

关于它是如何工作的:

注意索引数组的形状:

In [37]: np.array([0,2,3])[:,np.newaxis].shape
Out[37]: (3, 1)

In [38]: np.array([0,1,3]).shape
Out[38]: (3,)

的使用[:,np.newaxis]只是使第一个数组的形状为(3,1)。

由于这些是numpy数组(而不是切片),因此numpy使用所谓的“花式”索引。花式索引的规则要求两个数组的形状相同,或者在它们不相同时,使用广播“抽出”形状,以便它们确实匹配。

在这种情况下,第二个数组的形状(3,)被抽至(1,3)。但是(3,1)和(1,3)不匹配,因此(3,1)被抽至(3,3),而(1,3)被抽至(3,3)。

啊,最后,两个numpy数组(在广播之后)具有相同的形状(3,3)。

Numpy获取arr[<array of shape (3,3)>, <array of shape (3,3)>] 并返回一个形状数组(不足为奇)(3,3)。

返回数组的第(i,j)个元素将是

arr[(i,j)-th element of first array, (i,j)-th element of second array]

一个数组和第二个数组在概念上看起来像这样:

first array:     second array:
[[0 0 0],        [[0, 1, 3],
 [2 2 2],         [0, 1, 3],
 [3 3 3]]         [0, 1, 3]]
其他 2022/1/1 18:51:11 有449人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶