如何获取numpy的第一个非0元素索引

我就废话不多说了,

大家还是直接看代码吧~

import numpy as np
arr=np.array([0,0,2,3,0,4])
print((arr!=0).argmax(axis=0))
#2

补充:python获取二维矩阵的每一行的第一个非零元素

直接上代码~

"""
核心函数:
array_1D!=0 :返回一个True/False序列
array.argmax(axis=0):返回沿axis轴的最大元素的索引,当存在多个相等的最大值时,返回第一个最大值的索引
"""
import numpy as np

array_1D = np.array([0,1,0,-1,0])
array_2D = np.array(
    [[0, 1, 0, -1, 0],
     [0, 0, -1, 0, 1],
     [0, 1, -1, 0, 1],
     [4, 0, -1, 0, 1],
     [7, 16, -1, 0, 1]])

def get_first_non_zero_1D(array_1D):
    first_non_zero = array_1D[(array_1D!=0).argmax(axis=0)]
    return first_non_zero

"""
备注:以下三个函数完全等价,个人比较喜欢最后一个 get_first_non_zeros_2D_2,因为看着比较舒服,也可以方便地扩展到更多维度。
"""

def get_first_non_zeros_2D(array_2D):
    first_non_zeros = np.array([get_first_non_zero_1D(array_2D[i]) for i in range(array_2D.shape[0])])
    return first_non_zeros

def get_first_non_zeros_2D_1(array_2D):
    first_non_zeros = []
    for i in range(array_2D.shape[0]):
        arr = array_2D[i,:]
        first_non_zero = arr[(arr!=0).argmax(axis=0)]
        first_non_zeros.append(first_non_zero)
    return np.array(first_non_zeros)

def get_first_non_zeros_2D_2(array_2D):
    none_zero_index = (array_2D!=0).argmax(axis=1)
    # first_non_zeros = np.array([array_2D[i,none_zero_index[i]] for i in range(array_2D.shape[0])])
    first_non_zeros = array_2D[range(array_2D.shape[0]),none_zero_index]
    return first_non_zeros

b = get_first_non_zeros_2D(array_2D)
c = get_first_non_zeros_2D_1(array_2D)
d = get_first_non_zeros_2D_2(array_2D)
print(b)
print(c)
print(d)
"""
打印结果:
[ 1 -1  1  4  7]
[ 1 -1  1  4  7]
[ 1 -1  1  4  7]
"""

补充:[Python] np.nonzero(ndarray) 返回数组中不为0的元素的索引

语法:

函数返回值为tuple元组类型,tuple内的元素数目与ndarray维度相同。

np.nonzero(ndarray)

先强调一点,数组的索引是从0开始。

示例:

# 1维数组
a = [0,2,3]
b = np.nonzero(a)
print(b)
# (array([1, 2], dtype=int64),)
# 说明:索引1和索引2的位置上元素的值非零。

# 2维数组
a = np.array([[0,0,3],[0,0,0],[0,0,9]])
b = np.nonzero(a)
print(b)
# (array([0, 2], dtype=int64), array([2, 2], dtype=int64))
# 说明:
# tuple的每一个元素,从一个维度来确定非零元素的位置。所以对于二维数组,tuple就有两个元素。
# tuple的元素的内容是该维度不为0的元素的位置,排列顺序是数组遍历的顺序。
# 比如确定第一个非零元素的位置:先找tuple内的第一个元素  array([0, 2], dtype=int64)的第一个元素,为0,说明第一个非零元素在第一行;
# 之后tuple内的第二个元素 array([2, 2], dtype=int64)的第一个元素,为2,说明第一个非零元素在第三列。

# 3维数组
a = np.array([[[0,1],[1,0]],[[0,1],[1,0]],[[0,0],[1,0]]])
print(a)
# [[[0 1]
#   [1 0]]
#
#  [[0 1]
#   [1 0]]
#
#  [[0 0]
#   [1 0]]]
b = np.nonzero(a)
print(b)
# (array([0, 0, 1, 1, 2], dtype=int64), array([0, 1, 0, 1, 1], dtype=int64), array([1, 0, 1, 0, 0], dtype=int64))
# 说明:由于a是3维数组,因此,索引值数组有3个一维数组,分别代表层、行、列。
# 查找原理和二维数组一致,不再赘述。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • python如何获得list或numpy数组中最大元素对应的索引

    获得list中最大元素的索引 aa = [1,2,3,4,5] aa.index(max(aa)) 相应的最小值使用 aa = [1,2,3,4,5] aa.index(min(aa)) 获得numpy数组中最大元素的索引 1.可以使用numpy的函数,argmax获得最大元素的索引,相应的获得最小值的话需要使用argmin. aa = [1,2,3,4,5] arr_aa = np.array(aa) maxindex = np.argmax(arr_aa ) 1.也可以将numpy转为lis

  • 浅谈python已知元素,获取元素索引(numpy,pandas)

    目前搜索到的方法有: np.where('元素') 还有就是pandas的方法: df.index('元素') 但是第二个方法的问题就是会报错,嗯,这就比较尴尬了,查询了网上的解决方案,有这样的: 此外使用 df[df['列名'].isin([相应的值])] 这个命令会输出等于该值的行. 此外如果想快速找到dataframe最后几行的话,可以使用的方法是tail,可以获取若干行的值 以上这篇浅谈python已知元素,获取元素索引(numpy,pandas)就是小编分享给大家的全部内容了,希望能给

  • numpy:找到指定元素的索引示例

    目的:在numpy数组中知道指定元素的索引 函数: np.argwhere >>>x >>>array([[0, 1, 2], [3, 4, 5]]) >>>np.argwhere(x>1) >>>array([[0, 2], [1, 0], [1, 1], [1, 2]]) 以上这篇numpy:找到指定元素的索引示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • numpy 实现返回指定行的指定元素的位置索引

    先上代码,主要语句为np.where(b[c]==1), 详细解释如下: import numpy as np b = np.array([[-2,-3,0,0,0,6,4,1],[88,1,0,0,0,6,4,2],[99,6,0,0,1,6,4,2]]) # 三行八列的数组b print('b\n',b) c = np.array([2,0]) # c表示指定行 print('b[c]\n',b[c]) # b[c]返回 数组b的指定行 这里依次返回了b的下标为2和0的行 print('\n

  • 如何获取numpy的第一个非0元素索引

    我就废话不多说了, 大家还是直接看代码吧~ import numpy as np arr=np.array([0,0,2,3,0,4]) print((arr!=0).argmax(axis=0)) #2 补充:python获取二维矩阵的每一行的第一个非零元素 直接上代码~ """ 核心函数: array_1D!=0 :返回一个True/False序列 array.argmax(axis=0):返回沿axis轴的最大元素的索引,当存在多个相等的最大值时,返回第一个最大值的索引

  • 使用numpy nonzero 找出非0元素

    直接上代码吧~ import numpy as np a = np.array([[30,40,70],[80,20,10],[50,90,60]]) print(a) print(np.nonzero(a)) [[30 40 70] [80 20 10] [50 90 60]] (array([0, 0, 0, 1, 1, 1, 2, 2, 2], dtype=int64), array([0, 1, 2, 0, 1, 2, 0, 1, 2], dtype=int64)) 第一个array为x

  • php查找字符串中第一个非0的位置截取

    话不多说,请看代码: $str = '00000000000000000000000000000000000000001234506'; $preg = '/[0]*/'; $result = preg_replace($preg, '', $str, 1); 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持我们!

  • Python 获取numpy.array索引值的实例

    举个例子: q=[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15] 我想获取其中值等于7的那个值的下标,以便于用于其他计算. 如果使用np.where,如: q=np.arange(0,16,1) g=np.where(q==7) print q print g 运行结果是: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15] (array([7]),) 显然(array([7]),)中的数字7我是没法提取出来做运算的,这是一个tuple

  • 解决使用了nginx获取IP地址都是127.0.0.1 的问题

    获取ip工具 import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import javax.servlet.http.HttpServletRequest; /** * IP地址 * * @date 2020年3月6日 下午12:57:02 */ @Slf4j public class IPUtils { /** * 获取IP地址 * * 使用Nginx等反向代理软件, 则不能通过reque

  • 正则表达式 匹配至少有一个非空白字符并且不超过指定长度

    chinmo 逆向思维解决方案 复制代码 代码如下: <script type="text/javascript"> /** * 至少有一个非空白字符并且不超过6个字符的正则表达式 * * 作者:chinmo * 整理:http://www.CodeBit.cn * 来源:http://topic.csdn.net/u/20090207/18/ffa003ed-ecd4-40e0-b81f-36aa1fe46d85.html#r_55136904 */ var patter

  • PHP使用GETDATE获取当前日期时间作为一个关联数组的方法

    本文实例讲述了PHP使用GETDATE获取当前日期时间作为一个关联数组的方法.分享给大家供大家参考.具体分析如下: PHP GETDATE函数是用来获得当前的日期和时间,从操作系统或一个关联数组转换成UNIX风格的日期整数. 语法格式如下 array getdate (); array getdate (integer $Time); 参数如下: Arguments $Time The number of seconds since midnight before January 1, 1970

  • jQuery 获取遍历获取table中每一个tr中的第一个td的方法

    如下所示: <tbody id="already_question_list"> <tr> <td><?php echo $val['unique_number']; ?></td> <td><?php echo $val['year'].'-'.$val['series']; ?></td> <td><?php echo $val['content'] ?><

  • 在numpy矩阵中令小于0的元素改为0的实例

    如下所示: >>> import numpy as np >>> a = np.random.randint(-5, 5, (5, 5)) >>> a array([[-4, -4, -5, 2, 1], [-1, -2, -1, 3, 3], [-1, -2, 3, -5, 3], [ 0, -3, -5, 1, -4], [ 0, 3, 1, 3, -4]]) # 方式一 >>> np.maximum(a, 0) array([[

  • 利用ctypes获取numpy数组的指针方法

    如下所示: import numpy as np from ctypes import * a = np.asarray(range(16), dtype=np.int32).reshape([4,4]) if not a.flags['C_CONTIGUOUS']: a = np.ascontiguous(a, dtype=a.dtype) # 如果不是C连续的内存,必须强制转换 a_ctypes_ptr = cast(a.ctypes.data, POINTER(c_int)) #转换为ct

随机推荐