加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python-使用整数数组中与列相关的结束索引的numpy切片

发布时间:2020-12-17 17:38:57 所属栏目:Python 来源:网络整理
导读:如果我有一个数组并且应用求和 arr = np.array([[1.,1.,2.],[2.,3.,4.],[4.,5.,6]])np.sum(arr,axis=1) 我得到了三行的总数([4.,9.,15.]) 我的麻烦是arr包含某些列索引之后可能不好的数据.我有一个整数数组,告诉我每行有多少个“好”值,并且我想对这些好值进

如果我有一个数组并且应用求和

arr = np.array([[1.,1.,2.],[2.,3.,4.],[4.,5.,6]])
np.sum(arr,axis=1)

我得到了三行的总数([4.,9.,15.])

我的麻烦是arr包含某些列索引之后可能不好的数据.我有一个整数数组,告诉我每行有多少个“好”值,并且我想对这些好值进行求和/平均.说:

ngoodcols=np.array([0,1,2])
np.sum(arr[:,0:ngoodcols],axis=1)  # not legit but this is the idea

很清楚如何在循环中执行此操作,但是有一种方法可以只求出这么多的总和,而不用循环就产生[0.,2.,9.]?同样,如果我知道如何将列索引中的元素设置为大于b等于np.nan,则可以使用nansum,但是就切片而言,这几乎是等效的问题.

最佳答案
一种可能性是使用masked arrays:

import numpy as np

arr = np.array([[1.,6]])
ngoodcols = np.array([0,2])
mask = ngoodcols[:,np.newaxis] <= np.arange(arr.shape[1])
arr_masked = np.ma.masked_array(arr,mask)
print(arr_masked)
# [[-- -- --]
#  [2.0 -- --]
#  [4.0 5.0 --]]
print(arr_masked.sum(1))
# [-- 2.0 9.0]

请注意,在这里,当没有好的值时,您将得到一个“缺失”值,这可能对您有用也可能没有用.另外,带掩码的数组还使您可以轻松地执行仅适用于有效值(均值等)的其他操作.

另一个简单的选择是乘以掩码:

import numpy as np

arr = np.array([[1.,np.newaxis] <= np.arange(arr.shape[1])
print((arr * ~mask).sum(1))
# [0. 2. 9.]

在这里,您只会得到零.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读