我希望找到2D NumPy数组的每个列(最后一列除外)的方法。最后一列有一个分类器/标识符。因此,不根据分类器对数组进行排序,我只希望根据每个分类器找到每一列的平均值。下面是2D矩阵的示例行。
row1 = [1, 2, 3,...,0]
row2 = [2, 3, 4,...,1]
row3 = [3, 4, 5,...,0]
row4 = [4, 5, 6,...,1]
...
rowN = [9, 8, 7,...,0]基于上面的行,我想要2D数组的每一列的平均值,只有那些有分类器=0的行,然后才有分类器= 1。没有if语句和不首先对数组排序的情况下,有一种节奏式的方法可以做到这一点吗?
发布于 2020-05-05 21:05:06
过滤分类器值上的行,并执行除最后一列之外的所有列的平均值:
a = # your matrix
classifier0 = a[:,-1]==0
mc0 = np.mean(a[classifier0,:-1],axis=0)
classifier1 = a[:,-1]==1
mc1 = np.mean(a[classifier1,:-1],axis=0) 发布于 2020-05-05 19:31:15
在不使用if或排序的情况下这样做的诀窍是使用键作为索引,无论是对数组还是对dict,就像我下面使用的那样。
import numpy as np
def sum_by_col(array, keycol):
key_arr = array[:, keycol]
array = np.delete(array, keycol, axis=1)
means = {}
for key in np.unique(keys):
means[key] = array[key_arr == key].mean(axis=0)
return means如果您想在不使用NumPy的情况下执行此操作,则可能会有两个顶级循环。首先,您可以遍历元素并按键(作为矩阵或运行和)对元素进行分组,然后您可以再次遍历以计算平均值。
发布于 2020-05-05 19:33:14
如果我正确理解了您的问题:让我们假设这是您的2D numpy数组:
import numpy as np
A =np.array([[1, 2, 3,0],[2, 3, 4,1], [3, 4, 5,0],[4, 5, 6,1]])这是根据分类器值(矩阵中的最后一列)求出每一列的平均值的方法。
print('1-Classifier mean:',A[A[:,-1]==1].mean(axis=0)[:-1])
print('0-Classifier mean:',A[A[:,-1]==0].mean(axis=0)[:-1])结果:
1-Classifier mean: [3. 4. 5.]
0-Classifier mean: [2. 3. 4.]https://stackoverflow.com/questions/61620652
复制相似问题