我有一个由7列组成的数组,我试图从所有其他列中减去第一列。现在,我的代码如下所示:

a  = (q[:,0]-q[:,1])**2
a1 = (q[:,0]-q[:,2])**2
a2 = (q[:,0]-q[:,3])**2
a3 = (q[:,0]-q[:,4])**2
a4 = (q[:,0]-q[:,5])**2
a5 = (q[:,0]-q[:,6])**2


效果很好,除了我要对许多文件尝试这样做而且效率极低。有没有更有效的方式来编写相同的代码?

谢谢

最佳答案

如果要从所有其他列中减去第一列,则可以执行

import numpy as np
x = np.arange(40).reshape(8, 5) #sample data
y = (x - x[:,0,None])**2


x[:,0,None]代表第一列。如果仅尝试x - x[:,0],则numpy无法一起广播形状(在这种情况下为(8,5)和(8,))。添加x[:,0,None](或x[:,0,np.newaxis])使第二个形状(8,1)和numpy可以一起广播两者。

07-24 09:47
查看更多