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]]
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]])
您可以使用
subtract
ufunc的outer
方法。outer
将运算(在本例中是减法)应用于每个可能的对,并将结果排列在矩阵中:它可以方便地接受列表等,而不必显式地将它们转换为数组。在
如果不想使用
numpy
,可以使用嵌套的for
循环:编辑:@aryamcarthy指出
^{pr2}$for
循环的效率低于numpy
广播。他给出的另一个选择是使用列表理解来获得相同的结果:您可以利用numpy广播:
相关问题 更多 >
编程相关推荐