首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >对2D NumPy阵列的每行和每列内的非零元素进行计数

对2D NumPy阵列的每行和每列内的非零元素进行计数
EN

Stack Overflow用户
提问于 2010-09-26 17:07:06
回答 5查看 31.8K关注 0票数 28

我有一个NumPy矩阵,它包含大多数非零值,但偶尔也包含零值。我需要能够:

  1. 对每行中的非零值进行计数,并将该计数放入可在后续操作中使用的变量中,可能是通过迭代行索引并在迭代过程中执行计算。
  2. 对每列中的非零值进行计数,并将该计数放入可在后续操作中使用的变量中,可能是通过迭代列索引并在迭代过程中执行计算。

例如,我需要做的一件事是对每行求和,然后将每行和除以每行中非零值的数量,为每行索引报告一个单独的结果。然后我需要对每一列求和,然后将列总和除以该列中非零值的数量,同时为每个列索引报告一个单独的结果。我还需要做其他事情,但在我弄清楚如何做我在这里列出的事情之后,它们应该很容易。

下面是我正在使用的代码。您可以看到,我正在创建一个零数组,然后从一个csv文件填充它。一些行将包含所有列的值,但其他行仍将在最后一些列中保留一些零,从而产生上述问题。

下面最后五行代码来自本论坛上的另一篇帖子。这最后五行代码返回一个打印的0的行/列索引列表。但是,我不知道如何使用结果信息来创建上述非零行计数和非零列计数。

代码语言:javascript
复制
ANOVAInputMatrixValuesArray=zeros([len(TestIDs),9],float)
j=0
for j in range(0,len(TestIDs)):
    TestID=str(TestIDs[j])
    ReadOrWrite='Read'
    fileName=inputFileName
    directory=GetCurrentDirectory(arguments that return correct directory)
    inputfile=open(directory,'r')
    reader=csv.reader(inputfile)
    m=0
    for row in reader:
        if m<9:
            if row[0]!='TestID':
                ANOVAInputMatrixValuesArray[(j-1),m]=row[2]
                m+=1
    inputfile.close()

IndicesOfZeros = indices(ANOVAInputMatrixValuesArray.shape) 
locs = IndicesOfZeros[:,ANOVAInputMatrixValuesArray == 0]
pts = hsplit(locs, len(locs[0]))
for pt in pts:
    print(', '.join(str(p[0]) for p in pt))

有人能帮我吗?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3797158

复制
相关文章

相似问题

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