python numpy创建和使用

一、创建数组

import numpy as np

#创建数组,类型是numpy.ndarray
a = np.array([1,2,3]) 

#查看数组大小,输出(3,)
a.shape

arr.reshape(a,b)函数:给数组arr一个新的形状(a行,b列)而不改变其数据(可用-1做占位符)
如:

# 定义一个数组
arr = np.array([[1,2],[3,4],[5,6]])

# 改变数组arr的数组形状为1行,占位符-1表示让程序自动计算有多少列
#这里输出 [1,2,3,4,5,6]
arr.reshape(1,-1)

#如果想把arr中的3,改为33
arr[1,0] = 33

np.zeros((3,3)) #创建一个数组33列,元素都为0

np.ones((3,3))  #创建一个数组33列,元素都为1

np.full((3,3),0) #创建一个数组33列,元素都为0


np.eye(N,M=None, k=0, dtype=<type 'float'>) #生成对角矩阵

np.eye()
第一个参数N:输出方阵行数
第二个参数M:输出方阵的列数(默认为None)。如果M == None,那么M = N(就是把N的值赋值给M)
第三个参数k:以最左上角为原点,像右下角画斜线(斜线在每行的值为1),这个k就是斜线开始点在X轴的位置
第四个参数dtype:值类型。这个好理解,看字面意思就知道了

np.random.random((3,4)) 生成一个3行4列,每个元素都是0-1随机数的数组

二、索引操作

a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])

a[-2:-1,1:3] #前边表示行:'-2'表示从倒数第二行开始取到'-1'倒数第一行结束(倒数第一行不计,所以仅截取了倒数第二行),':'表示取到最后;后边表示列:1:3表示从编号为1的列取到编号为3的列(编号为3的列不计,正向取时编号为0的列列)

a[np.arange(3),1] += 10 # 表示前三列编号为1的列加10
a[np.arange(3),[1,1,1]] += 10 # 表示前三列编号为1的列加10
np.arange(3) # 生成包含03的数的一个数组(不包含3),np.range(3,7)生成包含37元素的数组,记前不记后

resualt_index = a>10 # 判断元素是否大于10的结果数组
#[[False, True, False, False], [False, True, False, False], [False, True, True, True], [ True, True, True, True]]

a[resualt_index] # 得到所有大于10的一维数组

a[a>10] # 上面两步的操作可以直接写成这样

三、元素的数据类型

numpy会根据你创建的数组,自动判断数组中的每个元素,数据类型是什么

arr = np.array(1, 2) # 通过执行arr.dtype,返回的数据类型为dtype('int32')
arr1 = np.array(1.1, 2.2) # 通过执行arr1.dtype,返回的数据类型为dtype('float64')
arr2 = np.array(arr1, dtype = np.int64) # 可以强制转换为 int64,但元素值会失真,全部变为整形

四、数学运算与常用函数

a = np.array([[1,2],[4,5]])
b = np.array([[2,3],[5,6]])

a+b # 返回a中每个对应位置的元素分别与b中每个对应位置的元素相减结果的数组,等同与函数np.add(a,b)
a-b # 返回a中每个对应位置的元素分别与b中每个对应位置的元素相减结果的数组,等同与函数np.subtract(a,b)
a*b # 返回a中每个对应位置的元素分别与b中每个对应位置的元素相减结果的数组,等同与函数np.mutiply(a,b)
a/b # 返回a中每个对应位置的元素分别与b中每个对应位置的元素相减结果的数组,等同与函数np.divide(a,b)
np.sqrt(a) # 开方

a.dot(b) # 矩阵之间的乘法 a的列数必须与b的行数相同,a的第n行第m个元素与b中第m行的第n个元素先相乘得到s,n不变的情况下循环m计算所得每个s累加,组成新数组的第n个元素。也可以使用np.dot(a, b )

五、常用函数

np.sum(a):得到每个元素相加的总和;np.sum(a, axis = 0):对数组当中的每一 进行求和;axis = 1 时是对每一行进行求和;

np.mean(a):得到每个元素的平均值;np.mean(a, axis = 0):对数组当中的行求平均;axis = 1 时是对每一行求平均;

np.random.uniform(1,100):得到一个随机数值,得到的是一个带小数的数;

tile:将一个数组,做为一个元素重复指定的次数。np.tile(a, (n,m)):a数组的行上重复n次,列上重复m次;

argsort:数组进行排序。a.argsort():默认对每一行进行从小到大排序,a.argsort(axis=0):对每一列进行从小到大排序

a.T:矩阵的转置,行和列互换,左上和右下不变,左下角换到右上角。np.transpose(a) 效果相同

六、广播

a = np.array([[1,2,3],[2,3,4],[3,4,5]])
b = np.array([1,2,3])

要求,a的每一行和b相加

方法一:a + np.tile( b, ( 4, 1 ) )
方法二:a + b

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值