numpy 基础

求范式(np.linalg.norm)

1.ord: 范数类型 

向量范式
参数说明计算方法
默认二范数\sqrt{x_1^2+x_1^2+\cdots+x_n^2}
ord=2同上同上
ord=1一范数|x_1|+|x_2|+\cdots+|x_3|
ord=np.inf无穷范数max(|x_1|)

2.axis:处理类型

axis=1表示按行向量处理,求多个行向量的范数

axis=0表示按列向量处理,求多个列向量的范数

axis=None表示矩阵范数。

3.keepdims:是否保持矩阵的二维特性

True表示保持矩阵的二维特性,False相反

import numpy as np
x = np.array([
    [0, 3, 4],
    [1, 6, 4]])
#默认参数ord=None,axis=None,keepdims=False
print "默认参数(矩阵2范数,不保留矩阵二维特性):",np.linalg.norm(x)
print "矩阵2范数,保留矩阵二维特性:",np.linalg.norm(x,keepdims=True)
 
print "矩阵每个行向量求向量的2范数:",np.linalg.norm(x,axis=1,keepdims=True)
print "矩阵每个列向量求向量的2范数:",np.linalg.norm(x,axis=0,keepdims=True)
 
print "矩阵1范数:",np.linalg.norm(x,ord=1,keepdims=True)
print "矩阵2范数:",np.linalg.norm(x,ord=2,keepdims=True)
print "矩阵∞范数:",np.linalg.norm(x,ord=np.inf,keepdims=True)
 
print "矩阵每个行向量求向量的1范数:",np.linalg.norm(x,ord=1,axis=1,keepdims=True)

reshape 参数-1的含义

Numpy 文档解释如下:

newshape : int or tuple of ints
The new shape should be compatible with the original shape. If an integer, then the result will be a 1-D array of that length. One shape dimension can be -1. In this case, **the value is inferred from the length of the array and remaining dimensions**.

大意是说,数组新的shape属性应该要与原来的配套,如果等于-1的话,那么Numpy会根据剩下的维度计算出数组的另外一个shape属性值。

z = np.array([[1, 2, 3, 4],
          [5, 6, 7, 8],
          [9, 10, 11, 12],
          [13, 14, 15, 16]])
z.shape
(4, 4)

代码段 小部件

也就是说,先前我们不知道z的shape属性是多少,但是想让z变成只有一列,行数不知道多少,通过`z.reshape(-1,1)`,Numpy自动计算出有16行,新的数组shape属性为(16, 1),与原来的(4, 4)配套。

squeeze()函数(删除数组中单维度的条目)

np.squeeze(a, axis=None)

 1)a表示输入的数组;
 2)axis用于指定需要删除的维度,但是指定的维度必须为单维度,否则将会报错;
 3)axis的取值可为None 或 int 或 tuple of ints, 可选。若axis为空,则删除所有单维度的条目;
 4)返回值:数组
 5) 不会修改原数组;

作用:从数组的形状中删除单维度条目,即把shape中为1的维度去掉

应用场景:在机器学习和深度学习中,通常算法的结果是可以表示向量的数组(即包含两对或以上的方括号形式[[]]),如果直接利用这个数组进行画图可能显示界面为空(见后面的示例)。我们可以利用squeeze()函数将表示向量的数组转换为秩为1的数组,这样利用matplotlib库函数画图时,就可以正常的显示结果了。

import numpy as np

a  = np.arange(10).reshape(1,10)
a

array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])

a.shape

(1, 10)

b = np.squeeze(a)
b

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

b.shape

(10,)

copy()的用法

numpy关于copy有三种情况,完全不复制视图(view或者叫浅复制(shadow copy)和深复制deep copy)。

b = a[:] 这种形式就属于第二种,即视图,这本质上是一种切片操作(slicing),所有的切片操作返回的都是视图。具体来说,b = a[:]会创建一个新的对象 b(所以 id(b)id(a) 返回的结果是不一样的),但是 b 的数据完全来自于a,和 a 保持完全一致,换句话说,b的数据完全由a保管,他们两个的数据变化是一致的,可以看下面的示例: 

import numpy as np

a = np.arange(4)
print(a)
b = a 
c = a[:]
d = np.copy(a)
a[-1] = 10 
print("b = " + str(b))
print("c = " + str(c))
print("d = " + str(d))

得到的结果如下所示:

[0 1 2 3]
b = [ 0  1  2 10]
c = [ 0  1  2 10]
d = [0 1 2 3]

b = a 和 b = a[:] 的差别就在于后者会创建新的对象,前者不会。两种方式都会导致 a 和 b 的数据相互影响。

要想不让 a 的改动影响到 b,可以使用深复制:

d = np.copy(a)

//操作符作用

取整除 - 返回商的整数部分(向下取整9//2 输出结果 4 , 9.0//2.0 输出结果 4.0

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值