python - Python:在 numpy 数组上进行矢量化
问题描述
X
并且Y
都是尺寸为 的 3d 数组(a,b,c)
。我的目标是做一个点积。
考虑索引i
和j
是标量的情况,并且(X[i,:,j].T).dot(Y[i,:,j])
很简单并返回一个标量。
但是,如果我尝试进行矢量化,i
并j
成为一维数组,并(X[i,:,j].T).dot(Y[i,:,j])
返回一个矩阵,但我期待一个一维数组作为结果。我该如何解决这个问题?
解决方案
使用列表理解的幼稚实现:
a,b,c = X.shape
r1 = [(X[i,:,j].T).dot(Y[i,:,j]) for i in range(a) for j in range(c)]
使用np.einsum实现:
r2 = np.einsum('ijk,ijk->ik', X,Y).flatten()
推荐阅读
- mongoose - 猫鼬虚拟计数字段: this.populate().execPopulate() 字段在访问时为空,除非首先在填充的文档上调用 .toJSON()
- label - 我想在标签中显示列表框项目的总量
- c# - 使用 MediaElement 在 UWP 中播放 UDP H.264 字节流
- python - 将多个 Python 子解释器嵌入到 C 程序中
- javascript - 使用服务器端处理的 AngularJS 数据表的计算列的事件
- ubuntu - Docker 运行容器并修改环境设置
- java - 正则表达式返回行,如果它包含所有字母并且整个字符串中只有 2 个大写字母
- shell - 如何将输出重定向到文件,如果它不存在则不创建它?
- html - 在 Bootstrap 中编辑导航窗格
- java - 如何使用 AsyncTask 向目标发送多个请求