添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
慈祥的消炎药  ·  JQuery ...·  2 年前    · 
才高八斗的开心果  ·  terminal - gcloud ...·  2 年前    · 

在numpy的ndarray类型中,似乎没有直接返回特定索引的方法,我只找到了where函数,但是where函数对于寻找某个特定值对应的索引很有用,对于返回一定区间内值的索引不是很有效,至少我没有弄明白应该如何操作 尴尬 。下面先说一下where函数的用法吧。

(1)where函数的使用场景:

例如现在我生成了一个数组:

import numpy as np
arr=np.array([1,1,1,134,45,3,46,45,65,3,23424,234,12,12,3,546,1,2])

现在arr是一个含有18个元素的ndarray类型的数组,后面就用数组来称呼它吧。假如我想返回数组中所有元素值为3所对应的索引位置,那么通过where函数可以很轻松地完成。
print np.where(arr==3)

它会返回一个包含所有值为3对应的索引位置的元组,如下图:

可以看到在索引为5、9、14的地方所对应的元素值为3。通过这样的方式可以轻松达到目的。但是对于一定变化范围内的索引这样就不行了。下面的方法是自己想出来的折衷办法,比较笨,高手清喷。

(2)通过一个辅助的数组来解决一定范围内值索引的查找

我们建一个标识元素索引的数组,然后通过它来显示符合条件的元素对应的索引。还是刚才的数组,假如我现在要返回元素值在3到100之间值的索引。我可以生成一个和arr相同大小的数组,然后首先通过一次筛选找到大于3的元素对应索引的数组,继而在其中再次筛选,最终得到想要的结果。代码如下:

b=np.arange(len(arr))#生成和arr相同长度的数组
c=b[arr>3]#c存放的就是arr中大于3的元素对应的索引
#最后通过遍历c数组,选择3到100之间的值打印出来
for i in range(len(c)):
    if arr[c[i]]<100:
        print c[i],
下面看一下执行的效果:


可以看到程序将所有介于3和100之间的元素对应的索引值打了出来,如果想同时获得索引值和相应的元素,只需将上面的“print c[i]”,  替换为 “print c[i],arr[c[i]]”即可。
当然这种方法也适用于选择某个特定值对应的索引,例如我想找到所有3对应的位置,可以用print b[arr==3]即可打印出所有值为3的元素所对应的索引。其实不论怎么做,都是用到了数组进行关系运算后生成布尔数组,然后让数组中为True的地方进行显示。

当然还可以通过两次进行筛选,分别筛选出大于3的元素和小于100的元素对应的索引数组,然后两个数组做交集处理,在numpy中有一个intersect1d函数可以进行这样的运算,但是仍然麻烦。目前只能想到这些办法,不知道有哪位高手有更好的方法,欢迎大家一起交流一下。

在numpy的ndarray类型中,似乎没有直接返回特定索引的方法,我只找到了where函数,但是where函数对于寻找某个特定值对应的索引很有用,对于返回一定区间内值的索引不是很有效,至少我没有弄明白应该如何操作。下面先说一下where函数的用法吧。(1)where函数的使用场景:例如现在我生成了一个数组:import numpy as nparr=np.array([1,1,1 In [63]: data = np. array (['int','float','int','boolean','double','boolean']) In [64]: data Out[64]: array (['int', 'float', 'int', 'boolean', 'double', 'boolean'], dtype='|S7') In [65]: np.unique(data) Out[65]: array (['
> Numpy Python 语言的一个扩充程序库。支持高级大量的维度 数组 与矩阵运算,此外也针对 数组 运算提供大量的数学函数库。 Numpy 内部解除了 Python 的 PIL (全局解释器锁),运算效率极好,是大量机器学习框架的基础库! > 本实训需要学员掌握 Python 的基本知识,了解 Numpy 的数据类型以及 数组 数组 属性。
没有x和y参数,则以元组形式输出满足条件的列表 索引 。 3.np.argwhere(co nd ition) Fi nd the i nd ices of array elements that are non-zero, grouped by element. 返回 结果不是元组,直接 返回 坐标 索引 。 Matlab 有一个函数叫做fi nd ,可以很方便地寻找 数组 内特定元素的下标,即:Fi nd i nd ices a nd values of nonzero elements。 这个函数非常有用。比如,我们想计算图1 点Q(x0, y0)抛物线的最短距离。一个可以实施的 方法 是:计算出抛物线上所有点到Q点的距离,找到最小值,用fi nd 函数找到最小值对应的下标,即M点横坐标和纵坐标对应的元素的下标,... ~~有一个神奇的事情,我看过很多人用a[a<3]这样的语法来筛选数据,但是每次我用的时候都会报错~ 直到今天,我仔细调试了一下才发现,该语句是有适用范围的。 比如说:矩阵可以用,但列表不可以。 下面做几个小的演示。 l = [1,2,3,4,5] #测试列表 l[l<3] # 语句不会通过,会报错 l_n = np. array (l) l_n[l_n<3] # 输出:[1, 2] 矩阵适用该语句l_n[l_n<3] 列表不适用 若要寻找列表 满足条
在进行物体检测的grou nd truth boxes annotations包围框坐标数据整理时,需要实现这样的功能: numpy 里面,对于N*4的 数组 ,要实现对于每一行,如果第3列和第1列数值相等或者第2列和第0列数值相等,就删除这一行,要 返回 保留下来的 numpy 数组 shape M*4 对于 numpy 数组 的操作要尽量避免for循环,因为 numpy 数组 支持布尔 索引 。 import numpy as np a1=np. array ( [1,0,1,5] a2=np. array ( [0,8,5,8] center=np.ra nd om.ra nd int(0,10,size=(3,4)
numpy 库对多维 数组 有非常灵巧的处理方式,主要的处理 方法 有: .reshape(shape) : 不改变 数组 元素, 返回 一个shape形状的 数组 ,原 数组 不变 .resize(shape) : 与.reshape()功能一致,但修改原 数组 In [22]: a = np.arange(20) #原 数组 不变 In [23]: a.reshape([4,5]) Out[23]: array ([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19]]) In [24]: a
NumPy 数组 的维数称为秩(rank),一维 数组 的秩为1,二维 数组 的秩为2,以此类推。在 NumPy ,每一个线性的 数组 称为是一个轴(axes),秩其实是描述轴的数量。比如说,二维 数组 相当于是一个一维 数组 ,而这个一维 数组 每个元素又是一个一维 数组 。所以这个一维 数组 就是 NumPy 的轴(axes),而轴的数量——秩,就是 数组 的维数。 Numpy 的矩阵模块为 nd array 对象,有很多属性:T,data, dtype,flags,flat,imag,real,size, itemsize,nbytes, nd im,shape,strides,ctypes,base等等。 >>> import n
你可以通过 numpy .where() 方法 来查找给定元素在 数组 索引 位置。例如,如果你有一个 numpy 的二维 数组 x,你可以使用以下代码来查找元素1的位置: import numpy as np x = np. array ([[0, 1, 2], [3, 4, 5]]) i nd ex = np.where(x == 1) print(i nd ex) 输出结果将是: ( array ([0]), array ([1])) 这意味着元素1位于 数组 x的第0行第1列(也就是第二个元素)。