![](/img/trans.png)
[英]What is the nicest (and fastest) way to create a flat dataframe from a multilevel dictionary
[英]What is the nicest way to weight planes in a numpy array?
我有以下代码,其中w是兼容维度的1D numpy数组,M是4D数组,
i = 0
for weight in w:
M[:, :, i, :] *= weight
i += 1
有没有更好的方法来达到同样的效果?
您正在使用来自w
的元素(即1D
数组)沿axis=2
缩放M
因此,您需要将w
扩展为具有np.newaxis/None
的2D数组,这将使extended version of w
与M
之间的轴对齐。 然后,在这两个数组之间执行逐元素乘法,为矢量化解决方案带来broadcasting
,如下所示 -
M *= w[:,None]
如果M
axis=2
的长度大于w
的元素数,则需要在乘以之前选择M
沿axis=2
的范围,如下所示 -
M[...,np.arange(w.size),:] *= w[:,None]
这个答案是基于我试图理解@Divakar的答案。 什么帮助我了解正在发生的事情是写他们的建议
M *= w[:,None]
如
M *= w[None,None,:,None]
现在,M和扩展w的尺寸明显相同。 当然,@ Divakar的版本更短,更优雅,但不太直观。
所以,一个完整的工作示例是:
import numpy as np
M = np.ones((1,4,3,2))
w = np.arange(3)
M *= w[None,None,:,None]
print M
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.