首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据Python中的最后一列查找未排序的2D数组的列方法

根据Python中的最后一列查找未排序的2D数组的列方法
EN

Stack Overflow用户
提问于 2020-05-05 18:45:25
回答 3查看 190关注 0票数 0

我希望找到2D NumPy数组的每个列(最后一列除外)的方法。最后一列有一个分类器/标识符。因此,不根据分类器对数组进行排序,我只希望根据每个分类器找到每一列的平均值。下面是2D矩阵的示例行。

代码语言:javascript
复制
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语句和不首先对数组排序的情况下,有一种节奏式的方法可以做到这一点吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-05 21:05:06

过滤分类器值上的行,并执行除最后一列之外的所有列的平均值:

代码语言:javascript
复制
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) 
票数 0
EN

Stack Overflow用户

发布于 2020-05-05 19:31:15

在不使用if或排序的情况下这样做的诀窍是使用键作为索引,无论是对数组还是对dict,就像我下面使用的那样。

使用NumPy,使用布尔数组索引mean非常容易。

代码语言:javascript
复制
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的情况下执行此操作,则可能会有两个顶级循环。首先,您可以遍历元素并按键(作为矩阵或运行和)对元素进行分组,然后您可以再次遍历以计算平均值。

票数 1
EN

Stack Overflow用户

发布于 2020-05-05 19:33:14

如果我正确理解了您的问题:让我们假设这是您的2D numpy数组:

代码语言:javascript
复制
import numpy as np
A =np.array([[1, 2, 3,0],[2, 3, 4,1], [3, 4, 5,0],[4, 5, 6,1]])

这是根据分类器值(矩阵中的最后一列)求出每一列的平均值的方法。

代码语言:javascript
复制
print('1-Classifier mean:',A[A[:,-1]==1].mean(axis=0)[:-1])
print('0-Classifier mean:',A[A[:,-1]==0].mean(axis=0)[:-1])

结果:

代码语言:javascript
复制
1-Classifier mean: [3. 4. 5.]
0-Classifier mean: [2. 3. 4.]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61620652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档