如何创建矩阵减法?python

2024-05-19 06:46:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个新手程序员。在

我想创建一个“减法矩阵”(我没有足够的词汇来描述它)。我想从所有的减法组合中创建一个矩阵。在

v = [1, 5, 10]

0   4   9
4   0   5
9   5   0

我想我在numpy中遗漏了一些非常基本的东西,但我确实知道它是什么。在

谢谢你


Tags: numpy矩阵词汇程序员新手遗漏
3条回答

您可以使用subtractufunc的outer方法。outer将运算(在本例中是减法)应用于每个可能的对,并将结果排列在矩阵中:

v = [1, 5, 10]
np.absolute(np.subtract.outer(v, v))
# array([[0, 4, 9],
#        [4, 0, 5],
#        [9, 5, 0]])

它可以方便地接受列表等,而不必显式地将它们转换为数组。在

如果不想使用numpy,可以使用嵌套的for循环:

v = [1, 5, 10]
vLen = len(v)
subMatrix = [[0]*vLen for x in range(vLen)] //creates empty matrix
for i in range(vLen):
    for j in range(vLen):
        subMatrix[j][i] = abs(v[i] - v[j])
# [[0, 4, 9],
#  [4, 0, 5],
#  [9, 5, 0]]

编辑:@aryamcarthy指出for循环的效率低于numpy广播。他给出的另一个选择是使用列表理解来获得相同的结果:

^{pr2}$

您可以利用numpy广播:

v = np.array([1, 5, 10])

# v[:, None] creates a 2d array, when subtracted by a 1d array, the broadcasting rule will
# make a cartesian subtraction 
np.abs(v[:, None] - v)

#array([[0, 4, 9],
#       [4, 0, 5],
#       [9, 5, 0]])

相关问题 更多 >

    热门问题