python --- 之where函数

where()的用法

一.返回索引

首先强调一下,where()函数对于不同的输入,返回的只是不同的。

1当数组是一维数组时,返回的值是一维的索引,所以只有一组索引数组

2当数组是二维数组时,满足条件的数组值返回的是值的位置索引,因此会有两组索引数组来表示值的位置

例如

复制代码
 1 >>>b=np.arange(10)
 2 >>>b
 3 array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
 4 >>>np.where(b>5)
 5  (array([6, 7, 8, 9], dtype=int64),)
 6 
 7 >>>a=np.reshape(np.arange(20),(4,5))
 8 >>>a 
 9 array([[ 0,  1,  2,  3,  4],
10        [ 5,  6,  7,  8,  9],
11        [10, 11, 12, 13, 14],
12        [15, 16, 17, 18, 19]])
13 >>>np.where(a>10)
14 (array([2, 2, 2, 2, 3, 3, 3, 3, 3], dtype=int64),
15  array([1, 2, 3, 4, 0, 1, 2, 3, 4], dtype=int64))
复制代码

 对numpy标准库里的解释做一个介绍:

numpy.where(condition[, xy])

基于条件condition,返回值来自x或者y.

如果.

参数:

condition : 数组,bool值

When True, yield x, otherwise yield y.

x, y : array_like, 可选

x与y的shape要相同,当condition中的值是true时返回x对应位置的值,false是返回y的

返回值:

out : ndarray or tuple of ndarrays

①如果参数有condition,x和y,它们三个参数的shape是相同的。那么,当condition中的值是true时返回x对应位置的值,false是返回y的。

②如果参数只有condition的话,返回值是condition中元素值为true的位置索引,切是以元组形式返回,元组的元素是ndarray数组,表示位置的索引


还有一种理解方法:

二:对数组赋值

# 方式四 >>> np . where ( a > 0 , a , 0 ) array([[0, 0, 0, 2, 1], [0, 0, 0, 3, 3], [0, 0, 3, 0, 3], [0, 0, 0, 1, 0], [0, 3, 1, 3, 0]])
满足条件a>0输出0,否则输出 a,
输出还是一个数组


作者:采石工
链接:https://www.zhihu.com/question/46988087/answer/115228501
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
三.在三维数组中求切片不为0

import numpy as np


p = np.array([[[0,1,2],[2,1,3]],[[4,7,8],[6,0,2]]])

print p

print p.sum(axis = 2).sum(axis = 1)

d = np.where(np.abs(p).sum(axis = 2).sum(axis = 1))

print d


[[[0 1 2]
  [2 1 3]]

 [[4 7 8]
  [6 0 2]]]
[ 9 27]
(array([0, 1]),)

可以看出来,np.sum(axis=2).sum(axis =1)是对一个面的所有元素求和,

再加上np.where可以求切片和不为0的片

如np.where(np.abs(p).sum(axis = 2).sum(axis = 1)>0)

转载:https://www.cnblogs.com/zz22--/p/8654395.html

注释:where可以用来查找图像中一定范围内的像素值,返回的是一个tuple,通过len(tuple),可以算出在这个范围内的像素值的个数

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 7-2 jmu-python-分段函数是指在Python编程语言中,实现分段函数的计算和绘制。分段函数是指在不同的区间内,函数的表达式不同。在Python中,可以使用if语句或者numpy库中的where函数来实现分段函数的计算。同时,也可以使用matplotlib库来绘制分段函数的图像。 ### 回答2: 7-2 jmu-python-分段函数是一道Python编程题目,要求我们编写一个程序,计算分段函数的值。分段函数是一种常用的数学函数形式,其定义域被划分为若干个子域,在每个子域里函数的表达式是不同的。 对于这个问题,我们可以采用Python语言编写一个函数来求解。具体来说,我们可以先将不同的子域分别处理成单独的函数,在不同的子域里分别调用不同的函数,最终得到分段函数的值。 首先,我们需要确定定义域并将其划分为不同的子域。假设我们需要求解的分段函数为f(x) = x^2-2x+1(x<1); f(x) = x+2 (1<=x<10); f(x) = x^3-20 (x>=10)。可以看出,定义域被分为了三个子域:x<1、1<=x<10、x>=10。 接下来,我们可以分别编写三个子函数,分别用来计算在不同子域内的函数值。对于每个子函数,我们需要传入一个参数x(x为定义域内的一个值),并返回对应函数在该点的函数值。 def func1(x): return x**2 - 2*x + 1 def func2(x): return x + 2 def func3(x): return x**3 - 20 最后,我们可以编写一个分段函数的总函数,根据输入的x的不同值,分别调用不同的函数进行计算。 def piecewise_function(x): if x < 1: return func1(x) elif 1 <= x <10: return func2(x) else: return func3(x) 这样,我们就可以通过调用piecewise_function来计算任意一个x在分段函数中的函数值。 ### 回答3: 7-2 jmu-python-分段函数 分段函数是指函数的定义域被分成多个区间,在每个区间内采用不同的函数表达式来表示函数的值。在图像上,分段函数表现出多段直线或曲线组成的形态。分段函数是高中数学中的一个重要概念,可以解决很多实际问题,如利润函数、收益函数等。 Python中可以通过if语句来实现分段函数的计算。首先要确定函数定义域的区间,然后在每个区间内使用不同的函数表达式计算函数值。具体实现过程如下: 1.确定函数的定义域区间,例如定义域为(-∞,2),[2,5),[5,+∞)。 2.定义一个函数名,例如f(x)。 3.使用if语句,在每个区间内使用不同的函数表达式计算函数值。 def f(x): if x<2: return x**2+3 elif x>=2 and x<5: return 2*x+1 else: return 4*x-3 4.调用函数,输入自变量x的值,求得函数值。 print(f(1)) # 输出4 print(f(3)) # 输出7 print(f(6)) # 输出21 上述代码中,函数f(x)的定义域被分成了三个区间:(-∞,2),[2,5),[5,+∞),并在每个区间内使用不同的函数表达式计算函数值。通过if语句的条件判断,可以实现对不同区间的函数表达式的选择。调用函数时,输入自变量x的值,就可以得到对应的函数值。 总之,Python中可以通过if语句实现分段函数的计算,这对于解决实际问题有很大的帮助。在编写代码时,需要注意定义域的分段和函数表达式的选择,以便正确计算函数值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值