python中numpy.where的两种用法以及zip()的用法

首先numpy.where(condition, x=None, y=None)可接收三个参数,condition表示待操作的numpy.array类型数组的逻辑判断, x和y是可选参数。

用法一:

当x,y为默认值时,对应用法一,此时where的作用为寻找在参数condition情况下数组内匹配的值,对于不同的输入,其返回python中numpy.where的两种用法以及zip()的用法的值是不同的。

        当输入(参数)是一维数组时,返回值是一维的索引,只有一组索引数组。

>>> import numpy as np
>>> a = np.array([5, 6, 7, 1, 2, 8, 9, 3, 4])
>>> a
array([5, 6, 7, 1, 2, 8, 9, 3, 4])
>>> np.where(a < 5)
(array([3, 4, 7, 8], dtype=int64),)

说明原数组a中索引值为3,4,7,8的数组元素他们的值是小于5的。

        当输入是二维数组时,返回的是匹配值的位置索引,但是注意会有两组索引数组表示返回值的位置。

import numpy as np
a = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])
b = np.where(a < 5)
print(b)

该段代码返回的结果为:

(array([0, 0, 0, 1], dtype=int64), array([0, 1, 2, 0], dtype=int64))

这两个返回的数组索引,分别对应满足情况的值在行列(维度)上的索引。

所以对应位置[0, 0],[0, 1],[0, 2], [1, 0] 上的元素值小于5。

如果此时想将返回值按坐标点的形式显示,就要用到Python中自带的zip函数

# 函数zip()用可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回这些元组组成的列表

import numpy as np
a = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])
b = np.where(a < 5)
for i in zip(*b):
    print(i)

输出:

(0, 0)
(0, 1)
(0, 2)
(1, 0)

用法二:

当x,y不为None时,对应用法二,此时函数类似二值化阈值处理

import numpy as np
a = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])
b = np.where(a < 5, 0, 10)  # 将符合condition的元素赋值为x 不符合赋值为y
print(b)

输出:

[[ 0  0  0]
 [ 0 10 10]
 [10 10 10]]

1. numpyreshape函数的用法numpy,reshape函数可以用于改变一个数组的形状。具体来说,reshape函数可以将一个数组转换为指定的形状,而不改变原始数组的数据。函数的语法如下: ``` numpy.reshape(a, newshape, order='C') ``` 其,参数a表示要改变形状的数组,参数newshape是一个整数元组,用于指定新的形状,参数order表示元素在新数组的排列顺序,默认是'C',表示C语言风格的行优先顺序。 例如,假设有一个形状为(2,3)的数组arr: ``` import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]]) ``` 可以使用reshape函数将其转换为一个形状为(3,2)的数组: ``` new_arr = np.reshape(arr, (3, 2)) ``` 将输出: ``` array([[1, 2], [3, 4], [5, 6]]) ``` 2. python内置函数zip的作用 zip函数可以将多个可迭代对象按照元素顺序打包成一个元组序列,返回一个迭代器。具体来说,zip函数会从每个可迭代对象取出一个元素,打包成一个元组,然后将这些元组依次返回。如果可迭代对象的长度不一致,则返回的元组序列的长度以最短的可迭代对象为准。 例如,假设有两个列表a和b: ``` a = [1, 2, 3] b = ['a', 'b', 'c'] ``` 可以使用zip函数将它们打包成一个元组序列: ``` c = zip(a, b) ``` 将输出: ``` [(1, 'a'), (2, 'b'), (3, 'c')] ``` 可以使用for循环迭代这个元组序列,依次取出每个元组: ``` for x in c: print(x) ``` 将输出: ``` (1, 'a') (2, 'b') (3, 'c') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值