python - 在 numpy 中向量化基于索引的矩阵运算
问题描述
如何矢量化以下循环?
def my_fnc():
m = np.arange(27.).reshape((3,3,3))
ret = np.empty_like(m)
it = np.nditer(m, flags=['multi_index'])
for x in it:
i,j,k = it.multi_index
ret[i,j,k] = x / m[i,j,i]
return ret
基本上,我将 m 中的每个值除以类似于对角线的东西。并非 m 中的所有值都会不同,arange 只是一个示例。
提前致谢!~
PS:这是上面函数的输出,不要介意nans :)
array([[[ nan, inf, inf],
[ 1. , 1.33333333, 1.66666667],
[ 1. , 1.16666667, 1.33333333]],
[[ 0.9 , 1. , 1.1 ],
[ 0.92307692, 1. , 1.07692308],
[ 0.9375 , 1. , 1.0625 ]],
[[ 0.9 , 0.95 , 1. ],
[ 0.91304348, 0.95652174, 1. ],
[ 0.92307692, 0.96153846, 1. ]]])
解决方案
用于一次性advanced-indexing
获得m[i,j,i]
等价物,然后简单地将输入数组除以它 -
r = np.arange(len(m))
ret = m/m[r,:,r,None] # Add new axis with None to allow for broadcasting
推荐阅读
- android - 如何修复不在颤振中心的应用栏
- javascript - Nodejs,Mongodb过滤对象数组的子数组
- javascript - 无法链接存储在计算机本地的 HTML/CSS/REACT 中的图像
- python - 带有封装的 Python 上的 AttributeError。对象没有属性......但是它有它
- java - 如何解决在 Java oop 中找不到或加载主类?
- git - Git rebase 从 master 到 dev
- php - INNERJOIN 与 COUNT DISTINCT
- performance - 优化listview Flutter中每个item的多个http调用
- sql - 如何将网站上不同用户的图像存储到oracle表中
- c# - c# winform 控件大小问题