np.newaxis等方法的使用

np.newaxis等方法的使用

1. np.newaxis

官方解释(np.newaxis)A convenient alias for None, useful for indexing arrays.

import numpy as np

np.newaxis is None
x = np.array([0,1,2])
print(x[np.newaxis,:],x[None,:], sep='\n')
x[np.newaxis,:] == x[None,:]

输出:

[[0 1 2]]
[[0 1 2]]
array([[ True,  True,  True]])

根据官方文档的解释,x[np.newaxis,:]、x[np.newaxis]和x[None]三者是等价的。

x[newaxis, :].shape
(1, 3)
x[newaxis].shape
(1, 3)
x[None].shape
(1, 3)
x[:, newaxis].shape
(3, 1)

所以说np.newaxis就是给None对象起了一个便于理解的别名。至于为什么None对象能用来给np.array创建一个新的维度,还要参看关于numpy文档关于索引的部分(Structural indexing tools)
To facilitate easy matching of array shapes with expressions and in assignments, the np.newaxis object can be used within array indices to add new dimensions with a size of 1.

2. np.argsort,np.argpartition

np.argsort、np.argpartition对应于np.sort、np.partition,分别返回排序和划分后相应元素的索引。
Usage:
numpy.argsort(a[, axis=-1, kind=None, order=None])

numpy.argpartition(a, kth[, axis=-1, kind=‘introselect’, order=None])

kind是可选的排序/划分的算法参数。

3. 实例: 利用np.newaxis、np.argsort、np.argpartition等函数实现k邻近

Python数据科学手册[1]实例:求随机点k邻近并可视化。

# np.newaxis 的使用

import numpy as np

x = np.random.rand(10, 2)
# print(x, end='\n\n')
# print(x[:,np.newaxis,:], x[np.newaxis,:,:], sep='\n'*2)
print(x[:,np.newaxis,:].shape, x[np.newaxis,:,:].shape, sep='\n')

# 利用numpy的广播特性 shape(10,1(np.newaxis),2) - shape(1(np.newaxis),10,2) --> (10,10,2)
tmp = x[:,np.newaxis,:] - x[np.newaxis,:,:]
print(f'Broadcasted shape:{tmp.shape}')
# 按最低维求和得到平方距离
sq_dist = np.sum((x[:,np.newaxis,:] - x[np.newaxis,:,:])**2, axis = -1)
# np.argsort可求得所有邻近(自身的最邻近即为本身)
nearest = np.argsort(sq_dist, axis=1)
# numpy的数组索引是多维数组风格
# print(nearest)
print(nearest[:,0])

# 使用np.argpartition 求得k邻近(是无序的)
knearest = np.argpartition(sq_dist, 3+1, axis=1)
# print(knearest)
print(knearest[:,:3+1])

# import seaborn as sns
import matplotlib.pyplot as plt
# 可视化k邻近
sns.set()
# plt.style.use('classic')
for i in range(x.shape[0]):
    for j in knearest[i,:3+1]:
        plt.plot(*zip(x[j], x[i]), color='black')

参考资料

[1]. Python数据科学手册,人民邮电出版社78-80

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值