当前位置: 首页 > 知识库问答 >
问题:

获取numpy 2D数组中包含非屏蔽值的第一行和最后一行和列的索引

吕修筠
2023-03-14

使用Python中的2D掩蔽数组,获取包含非掩蔽值的第一行和最后一行和列的索引的最佳方法是什么?

import numpy as np
a = np.reshape(range(30), (6,5))
amask = np.array([[True, True, False, True, True],
                  [True, False, False, True, True],
                  [True, True, True, False, True],
                  [True, False, False, False, True],
                  [True, True, True, False, True],
                  [True, True, True, True, True]])
a = np.ma.masked_array(a, amask)
print a
# [[-- -- 2 -- --]
#  [-- 6 7 -- --]
#  [-- -- -- 13 --]
#  [-- 16 17 18 --]
#  [-- -- -- 23 --]
#  [-- -- -- -- --]]

在本例中,我希望获得:

  • 轴0的(0,4)(因为具有未屏蔽值的第一行为0,最后一行为4;第六行(第5行)仅包含屏蔽值)

[我想过也许结合numpy.ma.flatnotmasked_edgesnumpy.apply_along_axis,没有任何成功...]

共有2个答案

吴品
2023-03-14

这里有一个基于artmax-

# Get mask for any data along axis=0,1 separately
m0 = a.all(axis=0)
m1 = a.all(axis=1)

# Use argmax to get first and last non-zero indices along axis=0,1 separately
axis0_out = m1.argmax(), a.shape[0] - m1[::-1].argmax() - 1
axis1_out = m0.argmax(), a.shape[1] - m0[::-1].argmax() - 1
姚棋
2023-03-14

IIUC你可以做:

d = amask==False #First know which array values are masked
rows,columns = np.where(d) #Get the positions of row and column of masked values

rows.sort() #sort the row values
columns.sort() #sort the column values

print('Row values :',(rows[0],rows[-1])) #print the first and last rows
print('Column values :',(columns[0],columns[-1])) #print the first and last columns

Row values : (0, 4)
Column values : (1, 3)

rows, columns = np.nonzero(~a.mask)
print('Row values :',(rows.min(), rows.max())) #print the min and max rows
print('Column values :',(columns.min(), columns.max())) #print the min and max columns

Row values : (0, 4)
Column values : (1, 3)
 类似资料:
  • 问题内容: 从第n个组中选择单个记录/值的最简单方法是什么?该组由物料及其价格确定(价格可以更改)。我需要找到最后一个物料的最后一个日期和最后一个物料价格组的最后一个日期。所以我想知道什么时候确切的价格改变了。 我试过下面的查询以获取当前(最后)价格的第一个日期,如果以前使用过该价格,则该日期可能会返回错误的日期: 这也只会返回最后一个,我该如何获取以前的?那么,上一个/第一个使用前一个价格的日期

  • 例如,从下面的代码 这只是一个示例数据集,我有一个包含6000行的数据框,我想找到每列的第一个和最后一个值,其中我还有作为值。我也不知道我的第一个值或最后一个值的索引。 我试过了 很少有人来自Link1,Link2,但没有任何成功。我还想得到第一个元素,而不是最小值。

  • 我有一个JxK数据帧M,我想计算以下内容。 对于每一行j,使M[j,k]最小的值k 然后,让满足第一个向量A_j和第二个向量A_k的值。然后,我需要两个向量。设向量C为向量排序(C(A_j,A_k))。 长度等于A_j的向量,其中元素i是组合和排序向量C中元素A_j[i]的索引。 长度等于A_k的向量,其中元素i是组合和排序向量C中元素A_k[i]的索引 对于上面提到的两个排序向量,所有关系都应该

  • 问题内容: 我有一个示例数据框显示如下。对于每一行,我想先检查c1,如果它不为null,则检查c2。通过这种方式,找到第一个非空列并将该值存储到列结果中。 我现在正在使用这种方式。但是我想知道是否有更好的方法。(列名没有任何模式,这只是示例) 当有很多列时,此方法看起来不好。 问题答案: 首先使用回填s,然后通过以下方式选择第一列: 要么: 性能 :

  • 这似乎是一个可笑的简单问题。。。但我没有看到我期待的简单答案。 那么,我如何在Pandas中获得给定列的第n行的值呢?(我对第一排特别感兴趣,但对更普遍的做法也感兴趣)。 例如,假设我想将中的1.2值作为变量。 做这件事的正确方法是什么?

  • 问题内容: 这似乎是一个非常简单的问题……但是我没有看到我期望的简单答案。 那么,如何获得Pandas中给定列的第n行的值?(我对第一行特别感兴趣,但也对更通用的做法也很感兴趣)。 例如,假设我想将Btime中的1.2值作为变量。 什么是正确的方法? df_test = 问题答案: 要选择该行,请使用: 要在列中选择第i个值,可以使用: (推荐)和之间有区别: DataFrame将数据存储在基于列