np.newaxis作用详解---超简单理解方式,通透

一、起始

np.newaxis的作用就是在这一位置增加一个一维,这一位置指的是np.newaxis所在的位置,举个例子如下。

x1 = np.array([1, 2, 3, 4, 5])
# the shape of x1 is (5,)
x1_new = x1[:, np.newaxis]
# now, the shape of x1_new is (5, 1)
# array([[1],
#        [2],
#        [3],
#        [4],
#        [5]])
x1_new = x1[np.newaxis,:]
# now, the shape of x1_new is (1, 5)
# array([[1, 2, 3, 4, 5]])

二、newaxis本质

是不是还是不理解?没关系,上面例子先放一放,继续往下看:

>> type(np.newaxis)
NoneType
>> np.newaxis == None
True

从这里可知,其实np.newaxis就是None,

>> x = np.arange(3)
>> x
array([0, 1, 2])
>> x.shape
(3,)

>> x[:, np.newaxis]
array([[0],
       [1],
       [2]])

>> x[:, None]
array([[0],
       [1],
       [2]])

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

三、综合理解

大家观察下上面使用newaxis的时机,都是配合切片[]使用的
不难观察到,对于x[:,np.newaxis]来说,若没有np.newaxis,则原式=x[:],就是把x中的元素全部取出返回一个视图而已,在一维数组中,x没有第二个轴,而加上np.newaxis后的x[:,np.newaxis]就是加了一个None,就是在x中的一维轴中的元素上加了一个轴,因此
x=[1,2,3]时,对1加轴得[1],对2得[2],对3得[3]
x=[[1],[2],[3]], 对[1]加轴得[[1]]。。。。。。x[:np.newaxis]=[[[1],[[2]],[[3]]]

参考:
https://www.jianshu.com/p/78e1e281f698
https://www.cnblogs.com/onemorepoint/p/8110523.html

这行代码的作用是计算每个像素点与每个聚类簇中心点的欧几里得距离。其中,img 是原始的图像数据,reshape(-1, 3) 的作用是将图像数据扁平化为一维数组,每个元素表示一个像素点的 RGB 三个通道的值。mu 是当前的聚类中心坐标,它的形状为 (k, 3),表示有 k 个聚类中心,每个聚类中心有 3 个坐标值。 具体来说,代码中 (img.reshape(-1, 3))[:, np.newaxis] 的作用是将扁平化后的图像数据变形为二维数组,每一行表示一个像素点的 RGB 三个通道的值。然后通过广播机制,将形状为 (1, 3) 的 mu 数组扩展为形状为 (k, 3) 的数组。这样,就可以计算每个像素点与每个聚类中心的欧几里得距离,结果保存在 diff 变量中。 重新写一下可以是这样的: ``` img_reshaped = img.reshape(-1, 3) diff = np.zeros((img_reshaped.shape[0], mu.shape[0])) for i in range(mu.shape[0]): diff[:, i] = np.sqrt(np.sum((img_reshaped - mu[i])**2, axis=1)) ``` 这段代码首先将扁平化后的图像数据 img 变形为形状为 (n_pixels, 3) 的二维数组 img_reshaped,其中 n_pixels 表示像素点的数目。然后创建一个形状为 (n_pixels, k) 的零数组 diff,用于存储每个像素点与每个聚类中心的欧几里得距离。接着,通过 for 循环遍历每个聚类中心,计算每个像素点与该聚类中心的欧几里得距离,并存储在 diff 的相应位置上。其中,np.sqrt 函数用于计算欧几里得距离的平方根。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

THMAIL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值