python把文字矢量化_如何将此python代码矢量化?

我正在尝试使用NumPy和矢量化操作使一段代码运行得更快。不过,我似乎对如何将此代码矢量化有误解(可能是因为对矢量化的理解不完全)。

下面是带循环的工作代码(A和B是一个设置大小的二维数组,已经初始化):for k in range(num_v):

B[:] = A[:]

for i in range(num_v):

for j in range(num_v):

A[i][j] = min(B[i][j], B[i][k] + B[k][j])

return A

下面是我对上述代码进行矢量化的尝试:for k in range(num_v):

B = numpy.copy(A)

A = numpy.minimum(B, B[:,k] + B[k,:])

return A

为了测试这些,我使用了以下代码,上面的代码包装在一个名为“algorithm”的函数中:def setup_array(edges, num_v):

r = range(1, num_v + 1)

A = [[None for x in r] for y in r] # or (numpy.ones((num_v, num_v)) * 1e10) for numpy

for i in r:

for j in r:

val = 1e10

if i == j:

val = 0

elif (i,j) in edges:

val = edges[(i,j)]

A[i-1][j-1] = val

return A

A = setup_array({(1, 2): 2, (6, 4): 1, (3, 2): -3, (1, 3): 5, (3, 6): 5, (4, 5): 2, (3, 1): 4, (4, 3): 8, (3, 4): 6, (2, 4): -4, (6, 5): -5}, 6)

B = []

algorithm(A, B, 6)

预期的结果,以及我得到的第一个代码是:[[0, 2, 5, -2, 0, 10]

[8, 0, 4, -4, -2, 9]

[4, -3, 0, -7, -5, 5]

[12, 5, 8, 0, 2, 13]

[10000000000.0, 9999999997.0, 10000000000.0, 9999999993.0, 0, 10000000000.0]

[13, 6, 9, 1, -5, 0]]

第二个(矢量化)函数返回:[[ 0. -4. 0. 0. 0. 0.]

[ 0. -4. 0. -4. 0. 0.]

[ 0. -4. 0. 0. 0. 0.]

[ 0. -4. 0. 0. 0. 0.]

[ 0. -4. 0. 0. 0. 0.]

[ 0. -4. 0. 0. -5. 0.]]

我错过了什么?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值