【转】Python numpy库的nonzero函数用法

当使用布尔数组直接作为下标对象或者元组下标对象中有布尔数组时,都相当于用nonzero()将布尔数组转换成一组整数数组,然后使用整数数组进行下标运算。

nonzeros(a) 返回数组a中值不为零的元素的下标,它的返回值是一个长度为a.ndim(数组a的轴数)的元组,元组的每个元素都是一个整数数组,其值为非零元素的下标 在对应轴上的值。例如对于一维布尔数组b1,nonzero(b1)所得到的是一个长度为1的元组,它表示b1[0]和b1[2]的值不为 0(False)。

>>> b1 = np.array([True, False, True, False])
>>> np.nonzero(b1)
    (array([0, 2]),)

对于二维数组b2,nonzero(b2)所得到的是一个长度为2的元组。它的第0个元素是数组a中值不为0的元素的第0轴的下标,第1个元素则是第1轴的下标,因此从下面的结果可知b2[0,0]、b[0,2]和b2[1,0]的值不为0:

>>> b2 = np.array([[True, False, True], [True, False, False]])
>>> np.nonzero(b2)
    (array([0, 0, 1]), array([0, 2, 0]))

当布尔数组直接做为下标时,相当于使用由nonzero()转换之后的元组作为下标对象:

>>> a = np.arange(3*4*5).reshape(3,4,5)
>>> a[b2]
array([[ 0,  1,  2,  3,  4],
       [10, 11, 12, 13, 14],
       [20, 21, 22, 23, 24]])
>>> a[np.nonzero(b2)]
array([[ 0,  1,  2,  3,  4],
       [10, 11, 12, 13, 14],
       [20, 21, 22, 23, 24]])

当下标对象是元组,并且其中有布尔数组时,相当于将布尔数组展开为由nonzeros()转换之后的各个整数数组:

>>> a[1:3, b2]
array([[20, 22, 25],
       [40, 42, 45]])
>>> a[1:3, np.nonzero(b2)[0], np.nonzero(b2)[1]]
array([[20, 22, 25],
       [40, 42, 45]])
时间: 2024-12-15 21:06:28

【转】Python numpy库的nonzero函数用法的相关文章

python分割字符串split,filter函数用法

现有字符串,需要取出用空格分隔的第一段,操作如下 >>> product_model = ‘WS-C2960G-24TC-L – Fixed Module 0′>>> product_model.split(‘ ‘)[0]‘WS-C2960G-24TC-L’ 不带参数的split(),会把所有空格(空格符.制表符.换行符)当作分隔符,如果有这些“空格”,则可这样写 >>> product_model = ‘WS-C2960G-24TC-L – Fixe

python中enumerate()函数用法

python中enumerate()函数用法 先出一个题目:1.有一 list= [1, 2, 3, 4, 5, 6]  请打印输出:0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 打印输出, 2.将 list 倒序成 [6, 5, 4, 3, 2, 1] 3.将a 中的偶数挑出 *2 ,结果为 [4, 8, 12] 这个例子用到了python中enumerate的用法.顺便说一下enumerate在for循环中得到计数的用法,enumerate参数为可遍历的变量,如 字符串,列表等

Python标准库 内置函数print objects sep ' ' end '\n' file sys st

本函数是实现对象以字符串表示的方式格式化输出到流文件对象file里.其中所有非关键字参数都按str()方式进行转换为字符串输出,关键字参数sep是实现分隔符,比如多个参数输出时想要输出中间的分隔字符:关键字参数end是输出结束时的字符,默认是换行符\n:关键字参数file是定义流输出的文件,可以是标准的系统输出sys.stdout,也可以重定义为别的文件:参数flush是立即把内容输出到流文件,不作缓存. 例子: #print() print(1, 2, 3, sep = ',', end =

python——Numpy库

Numpy库 英文官方文档:https://docs.scipy.org/doc/numpy/reference/arrays.ndarray.html Numpy库中的数组对象:N维数组类型:ndarray 1)      ndarray的作用: a)      数组对象性可以去掉元素间运算所需的循环,使一维向量更像单个数据. b)     设置专门的数组对象,经过优化,可以提升这类应用的运算速度. 2)      ndarray是一个多维数组对象,有两部分组成: 实际的数据 和 描述这些数据

Numpy中的tile函数用法

0.引言 在看机器学习实战这本书时,遇到numpy.tile(A,B)函数,开始没太明白这个函数用法,网上帖子也不太详细,经过一番试验后基本搞明白基本用法,分享给大家. 1.函数定义 tile函数是模板numpy.lib.shape_base中的函数. 函数形式:tile(A,rep) 功能:重复A的各个维度 参数类型: - A: Array类的都可以 - rep:A沿着各个维度重复的次数,从低维向高维重复 -A的类型众多,几乎所有类型都可以:array, list, tuple, dict,

numpy下的flatten()函数用法

flatten是numpy.ndarray.flatten的一个函数,其官方文档是这样描述的: ndarray.flatten(order='C') Return a copy of the array collapsed into one dimension. Parameters:   order : {‘C’, ‘F’, ‘A’, ‘K’}, optional ‘C’ means to flatten in row-major (C-style) order. ‘F’ means to f

python numpy库学习

1.numpy.floor(a) 返回大于元素的最小整数 a = np.array([-1.7, -1.5, -0.2, 0.2, 1.5, 1.7, 2.0]) np.floor(a) array([-2., -2., -1., 0., 1., 1., 2.]) 2.np.linspace(0,20,100)返回0到20之间的100个点的数组 3.hist,bin_edges=np.histogram(a, bins)注意这个函数产生的不一定正好所有的hist相加的和为1,因为bins的组距不

python中常用内置函数用法总结

强制类型转换:int()float()str()list()tuple()set()dict()总结,这几种类型转换函数得用法基本一致,基本就是int(要转换得数据).返回值类型为对应得数据类型 max():求多个参数的最大值,或可迭代对象中的最大元素min():最小值sum():求和,可迭代对象元素求和pow():求幂,pow(2, 3)等价于2 ** 3round():四舍五入,可以指定保留位数 hex():16进制oct():8进制bin():2进制 print:打印,输出input:输入

Python标准库 内置函数compile source filename mode flags 0 dont

这个函数用来编译一段字符串的源码,结果可以生成字节码或者AST(抽像语法树),字节码可以使用函数exec()来执行,而AST可以使用eval()来继续编译. 参数source是一串字符串的源码,或者是AST对象数组. 参数filename是读取字符串的文件对象,如果不是从文件里读取源码来编译,那么这里可以放一些用来标识这些代码的字符串. 参数mode是用来指明那种表示的源码类型:如果是exec类型,表示这是一个序列语句,可以进行运行:如果是eval类型,表示这是一个单一的表达式语句,可以用来计算