我有一个二维数组,如下所示:
array = [[23 ,89, 4, 3, 0],[12, 73 ,3, 5,1],[7, 9 ,12, 11 ,0]]
对于所有行,最后一列始终为0或1。我的目的是为第0列计算两个均值,其中一个均值是最后一列的值为0时的平均值,而一个均值是最后一列的值为1时的平均值。
例如对于上面给定的示例数组: 均值1:15(对于最后一列为0的所有行,均指0列) 平均值2:12(表示最后一列为1的所有行的0列的平均值)
我已经尝试过了(火车是我输入数组的名称):
mean_c1_0=np.mean(train[:: , 0])
variance_c1_0=np.var(train[:: , 0])
这使我得到了列0的平均值和方差。
我总是可以再引入一个for循环和几个if条件来继续检查最后一列,然后才在列0中添加相应的值,但是我正在寻找一种有效的方法。由于我是Python新手,所以我希望是否有一个numpy函数可以完成此任务。
您能指出我任何此类文档吗?
答案 0 :(得分:7)
您可以使用numpy的数组过滤。 (请参阅How can I slice a numpy array by the value of the ith field?),然后以这种方式获取均值。无需循环。
import numpy
x = numpy.array([[23, 89, 4, 3, 0],[12, 73, 3, 5, 1],[7, 9, 12, 11, 0]])
numpy.mean(x[x[:,-1]==1][::,0])
numpy.mean(x[x[:,-1]==0][::,0])
答案 1 :(得分:1)
您可以尝试一下。
mean_of_zeros = np.mean(numpy_array[np.where(numpy_array[:,-1] == 0)])
mean_of_ones = np.mean(numpy_array[np.where(numpy_array[:,-1] == 1)])