Numpy进阶小结

Numpy进阶要点总结

获取符合条件的索引

函数:where([condition])

eg. 获得数组[[ 1 2 3 4 5] [ 2 4 6 8 10] [ 3 6 9 12 15]]中大于5的元素的索引。

b=array1>5
index_gt5=np.where(b)

结果:

(array([1, 1, 1, 2, 2, 2, 2], dtype=int64), array([2, 3, 4, 1, 2, 3, 4], dtype=int64))

结果说明:

输出结果是二维数组中对应元素值为true的坐标,第一个array代表行,第二个array代表列。一一对应,组成(行,列)坐标对。

补充:函数:where([condition],x,y)

condition中为true的返回x, 为false 的返回y.

获得数组中最大最小值的索引

函数:np.argmax([array])

​ np.argmin([array])

元组(tuple)

这是新型编程语言才有的概念,C系列、Java语言中都没有。若某一变量/函数是元素(tuple)则可以返回多个变量,由多个变量同时接受,变量位置和该变量/函数的返回值位置对应。

例如,上述index_gt5是元组(tuple)类型。包含两个数组

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HjmIueih-1598581756083)(C:\Users\38266\AppData\Roaming\Typora\typora-user-images\image-20200527174224687.png)]

使用如下代码可以得到,两个数组。第一个数组存入x,第二个数组存入y.

x,y=index_gt5

创建元组

t=()

若元组中只有一个元素,则需要加“,” 如:t(1,)

导入导出csv、保存加载numpy

导入数据:np.genfromtxt() 导入csv: np.savetxt()

针对numpy数据,保存一个ndarray 使用np.save() 保存为 .npy ; 保存多个ndarray ,使用np.savez() 保存为.npz。

​ 加载使用np.load()

标量函数向量化

什么是标量函数?简单的说,就是传一个参数返回一个参数。

所谓向量化,就是把这个标量函数改装成,可以传一个数组返回一个数组,其中对每个元素的操作都和对应标量函数的的操作一致。

eg, 有一标量函数fun(x)

def fun(x):
    if x%2==0:
        return x**2
    else:
        return x

向量化后

fun_v=np.vectorize(fun,otypes=[float])
print(fun_v([1,2,3,4,5]))

结果:

[ 1. 4. 3. 16. 5.]

思考:依据函数向量化的思路,我们是否可以将np.max向量化求数组(dnarray)的行或列的最大值呢?

当然不可以,np.vectorize()向量化后对象对目标的操作是将目标的每一个元素单独取出操作,而我们要达到求行或列最大值的目的,需要对每一行元素取出进行操作。

由此,我们有了另一个函数np.apply_ along_ _axis().这个函数就可以对一条轴上元素整体取出进行操作,可以达到求行、列最大值的目的。

eg. 求 二维数组 array1 的每行最大值。

row_max=np.apply_along_axis(np.max,axis=1,arr=array1)

增加数组的维度

列的维度增加:x_col=x[:, np.newaxis]

行的维度增加:x_row=x[np.newaxis,: ]

Histogram函数和Bincount函数

Bincount函数

**用途1)**每个索引的次数np.bincount(x)

将一个索引数组称为bin数组,若x数组中最大的数为A,则bin数组的数量为A+1,索引为0 --> A,即 bin=[0, 1, 2, 3, ……,A]。np.bincout返回bin数组中每个元素在x中出现的次数。所以np.bincount返回值是一个长度为A的数组。

#我们可以看到x中最大的数为7,因此bin的数量为8,那么它的索引值为0->7

x = np.array([0, 1, 1, 3, 2, 1, 7])

#索引0出现了1次,索引1出现了3次......索引5出现了0次......

np.bincount(x)
#因此,输出结果为:array([1, 3, 1, 1, 0, 0, 0, 1])

#我们可以看到x中最大的数为7,因此bin的数量为8,那么它的索引值为0->7

x = np.array([7, 6, 2, 1, 4])

#索引0出现了0次,索引1出现了1次......索引5出现了0次......

np.bincount(x)
#输出结果为:array([0, 1, 1, 0, 1, 0, 1, 1])

**用途2)**参数weight。

同样, bin=[0, 1, 2, 3, ……,A]。在x中找到与bin中元素(元素设为index)相同的,记录下索引号,在weight数组中将索引号对应的权重元素累加。

w = np.array([0.3, 0.5, 0.2, 0.7, 1., -0.6])

# 我们可以看到x中最大的数为4,因此bin的数量为5,那么它的索引值为0->4

x = np.array([2, 1, 3, 4, 4, 3])

# 索引0 -> 0

# 索引1 -> w[1] = 0.5

#索引2 -> w[0] = 0.3

#索引3 -> w[2] + w[5] = 0.2 - 0.6 = -0.4

#索引4 -> w[3] + w[4] = 0.7 + 1 = 1.7

np.bincount(x,  weights=w)

# 因此,输出结果为:array([ 0. ,  0.5,  0.3, -0.4,  1.7])

用途3) 参数minlength

指定bin数组的最小长度。如果指定的长度小于x的长度,则这个参数不发挥作用。

# 我们可以看到x中最大的数为3,因此bin的数量为4,那么它的索引值为0->3

x = np.array([3, 2, 1, 3, 1])

# 本来bin的数量为4,现在我们指定了参数为7,因此现在bin的数量为7,所以现在它的索引值为0->6

np.bincount(x, minlength=7)

# 因此,输出结果为:array([0, 2, 1, 2, 0, 0, 0])

# 我们可以看到x中最大的数为3,因此bin的数量为4,那么它的索引值为0->3

x = np.array([3, 2, 1, 3, 1])

# 本来bin的数量为4,现在我们指定了参数为1,那么它指定的数量小于原本的数量,因此这个参数失去了作用,索引值还是0->3

np.bincount(x, minlength=1)

# 因此,输出结果为:array([0, 2, 1, 2])

histogram函数

计算x元素在bin区间的个数

eg.

x=np.array([1,1,2,3,2,4,4,5,6,6,6])
count,bins=np.histogram(x,[0,2,4,6,8])
print(count)
print(bins)

结果:

[2 3 3 3]

因此,输出结果为:array([0, 2, 1, 2])


### histogram函数

计算x元素在bin区间的个数

eg.

```python
x=np.array([1,1,2,3,2,4,4,5,6,6,6])
count,bins=np.histogram(x,[0,2,4,6,8])
print(count)
print(bins)

结果:

[2 3 3 3]
[0 2 4 6 8]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值