python未知数的矩阵运算_python – Numpy矩阵运算

这是解决此类问题的一般策略.

首先,编写一个小脚本,将循环显式写入两个不同的函数,最后进行测试,确保两个函数完全相同:

import numpy as np

from numpy import newaxis

def explicit(a):

n = a.shape[0]

m = np.zeros_like(a)

for k in range(n):

for i in range(n):

for j in range(n):

m[k,i] += a[i,j] - a[i,k] - a[k,j] + a[k,k]

return m

def implicit(a):

n = a.shape[0]

m = np.zeros_like(a)

for k in range(n):

for i in range(n):

for j in range(n):

m[k,i] += a[i,j] - a[i,k] - a[k,j] + a[k,k]

return m

a = np.random.randn(10,10)

assert np.allclose(explicit(a), implicit(a), atol=1e-10, rtol=0.)

然后,通过编辑隐式来逐步向量化函数,在每一步运行脚本以确保它们继续保持不变:

步骤1

def implicit(a):

n = a.shape[0]

m = np.zeros_like(a)

for k in range(n):

for i in range(n):

m[k,i] = (a[i,:] - a[k,:]).sum() - n*a[i,k] + n*a[k,k]

return m

第2步

def implicit(a):

n = a.shape[0]

m = np.zeros_like(a)

m = - n*a.T + n*np.diag(a)[:,newaxis]

for k in range(n):

for i in range(n):

m[k,i] += (a[i,:] - a[k,:]).sum()

return m

第3步

def implicit(a):

n = a.shape[0]

m = np.zeros_like(a)

m = - n*a.T + n*np.diag(a)[:,newaxis]

m += (a.T[newaxis,...] - a[...,newaxis]).sum(1)

return m

瞧瞧’!最后一个没有循环.为了矢量化这种方程,broadcasting就是要走的路!

警告:确保显式是您想要向量化的等式.我不确定是否也应该总结不依赖于j的术语.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值