这是一个简单的问题,但我找不到“最佳实践”,我想知道是否有比许多if语句更简单的方法。假设我有一个方法,它接受一个变量'data',它的形状是(N,M),其中N可以变化。具体来说,有时数据是形状(M,M)的一维数组,其他时间N=100,例如数据是形状(100,M)。你知道吗
下面是当N>;1时该方法的基本代码。当N>;1或N可以等于1(或者最好是当数据.shape=(M,),而不仅仅是(1,M))?我可以写很多if语句,但我希望有一个更干净的解决方案。你知道吗
#start with variables data.shape=(N,M), vol.shape=(M,), jstarts and jends .shape=(4,)
N=3
#N=1 #uncomment to test
M=20
jstarts = np.array([0,5,12,15])
jends = np.array([3,10,14,18])
data = np.arange(0,N,M).reshape(N,M)
data_new = np.empty((N,M))
for i in range(0,N):
for j in range(0,jstarts.size):
jstart = jstarts[j]
jend = jends[j]
tmp = np.sum(data[i,jstart:jend]*vol[jstart:jend])/np.sum(vol[jstart:jend])
data_new[i,jstart:jend] = tmp
*注意:jstart和jend依赖于j,但不依赖于i
我已经有一段时间没有花太多时间在numpy上了,但是IIRC,你至少应该能够通过使用
Ellipsis
删除外循环:相关问题 更多 >
编程相关推荐