所以我有一个3D数据集(x,y,z),我想用一组权重对其中一个轴(x)求和,w = w(x)。我正在求和的开始和结束索引对于每个(y,z)都是不同的,我通过屏蔽3D数组解决了这个问题。对于我没有求和的两个变量,权重是恒定的。关于实现和数学的答案都是值得赞赏的(有没有一种聪明的方法?
我有一个形状 (x,y,z) 的 3D 遮罩数组 (A) 和一个形状 (x,) 的 1D 数组 (t)。有没有一种好方法可以将A中的每个(y,z)元素与t中的相应数字相乘,而无需将t扩展到3D数组?我目前的解决方案是使用np.tensordot来制作一个与A形状相同的3D数组,该数组包含所有t值,但是花费运行时构建“new_t”数组感觉非常不令人满意,该数组实际上只是t的y * z副本。
当前解决方案示例:
a1 = np.array([[1,2,3,4],
[5,6,7,8],
[9,10,11,12]])
a2 = np.array([[0,1,2,3],
[4,5,6,7],
[8,9,10,11]])
#note: A is a masked array, mask is a 3D array of bools
A = np.ma.masked_array([a1,a2],mask)
t = np.array([10,11])
new_t = np.tensordot(t, np.ones(A[0].shape), axes = 0)
return np.sum(A*new_t, axis=0)
从本质上讲,我想以尽可能短的运行时间对所有i,j执行t*A[:,i,j],最好不使用太多其他库,而不是numpy和scipy。
产生所需输出的另一种方法(同样,运行时间太长):
B = [[t*A[:,i,j] for j in range(A.shape[2])] for i in range(A.shape[1])]
return np.sum(B,axis=2)
开心每一天1111
胡子哥哥
相关分类