python入门-numpy

一.调取包
import numpy as np

二.数组基本操作
#初始化
a = np.array([1,2,3])
b = np.array([[1,2,3],[4,5,6]])
c = np.array([1,2,3],dtype=np.int64)    #指定数据类型的初始化

#像list那样索引a[0],切片

type(a)    #numpy.ndarray 数组a的类型
a.dtype    #数组a的数据类型
b.shape    #(2,3)

#一些常用初始化
a = np.zeros((2,3))    #2*3全0 ndarray
b = np.ones((2,3))    #2*3全1 ndarray
c = np.full((2,3),8)    #2*3全8 ndarray
d = np.eye(3)    #3*3的单位矩阵
e = np.random.random((2,3))    #2*3随机数 ndarray
f = np.empty((2,3,4))    #2*3*4的空数组
g = np.arange(15)    #[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]

#数组取值赋值
#可以像list那样切片(多维数组可以各个维度同时切)
#注意1
#切片只是一个引用,比如
a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
b = a[0:3,0:2]    #b=[[1,2],[5,6],[9,10]]
#这是如果修改b[0][0]=1111,则b= [[1111,2],[5,6],[9,10]],但可怕的是a也变为[[1111,2,3,4],[5,6,7,8],[9,10,11,12]]
#所以这么切片操作出来的b只是个像pointer这样的东西
#可以使用b = np.copy(a[0:3,0:2]),这样再修改b就不会对a有影响

#注意2
#仍有a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
b1 = a[1,:]    #这是b1 = [5,6,7,8]    #b1.shape=(4,)
b2 = a[1:2,:]    #这是b2 = [[5,6,7,8]]    #b2.shape=(1,4)

#另一些高级取值方法
a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
b = a[[0,1,2],[0,2,3]]    #b = [a[0][0],a[1][2],a[2][3]]
#或b = a[np.arange(3),[0,2,3] ]

#用条件判定去取
bool_index = (a>2)
#a>2的索引为true
bool_index = [[False,False,True,True],[True,True,True,True],[True,True,True,True]]
#然后利用a[bool_index]就把符合条件的元素取出来组成一个list
#当然也可以直接b = a[a>2]

三.数学运算
x = np.array([[1,2],[3,4]], dtype=np.float64)
y = np.array([[5,6],[7,8]], dtype=np.float64)
#逐元素求和
x+y
np.add(x,y)
#逐元素作差
x-y
np.subtract(x,y)
#逐元素相乘
x*y
np.multiply(x,y)
#逐元素相除
x/y
np.divide(x,y)
#逐元素求平方根
np.sqrt(x)

v = np.array([1,2])
w = np.array([3,4])
#求两vector点积
v.dot(w)
np.dot(v,w)
#matrix与vector相乘
x.dot(v)
np.dot(x,v)
#matrix与matrix相乘
x.dot(y)
np.dot(x,y)
np.matmul(x,y)
#注意,三维以上np.dot(x,y)与np.matmul(x,y)有区别
x = np.arange(24).reshape(2,3,4)
y = np.arange(16).reshape(2,4,2)
np.dot(x,y)得出一个2*3*2*2的tensor
np.matmul(x,y)得出一个2*3*2的tensor

#像v,w这样一维vector转置还是自己
u= np.array([[1,2,3]])
#像u这样初始化就是一个1*3维的二维数组
#u.T就是array([[1],[2],[3]]),3*1维的二维数组

#高维转置*

#矩阵内所有元素求和
x = np.array([[1,2],[3,4]])
x.sum()
np.sum(x)
#对某一维求和
np.sum(x,axis=0),对第0维求和就是对列求和,得到[4,6]
np.sum(x,axis=1),对第1维求和就是对行求和,得到[3,7]

np.cumsum(x,axis=0)
得到
[[1 2]
[4 6]]
np.cumsum(x,axis=1)
得到
[[1 3]
[3 7]]
同样还有np.cumprod(x,axis=0)
(图片描述第0轴与第一轴的方向)

四.数组排序
#一维数组
arr = np.random.randn(9)
arr.sort()    #arr变为排序后的
#二维数组在某些维度上排序
arr2 = np.random.randn(5,3)
arr2.sort(axis=0)    #在0维度上排序
arr2.sort(axis=1)    #在1维度上排序

五.广播(broadcasting)
对两个矩阵进行操作时,numpy逐元素的比较他们的形状,从后面的维度向前执行。当以下情况出现时,两个维度是兼容的:
1.他们相等
2.其中一个是1


六.逻辑运算
x_arr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
y_arr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
cond = np.array([True, False, True, True, False])
np.where(cond, x_arr, y_arr)    #cond里为true取x_arr,为false取y_arr

七.其他高级操作 
numpy可以很容易地把一维数组转成二维数组,三维数组。
arr = np.arange(20)
arr2 = arr.reshape(2,2,5)    #arr2变成维度2*2*5的,arr还是不变
如果我们在某一个维度上写上-1,numpy会帮我们自动推导出正确的维度

other_arr = np.ones((4,5))
arr.reshape(other_arr.shape)    #按照other_arr的维度重塑arr

#高维数组可以用ravel来拉平
arr2.ravel()    #arr2变回一维数组

#连接两个二维数组
arr1 = np.array([[1,2,3],[4,5,6]])
arr2 = np.array([[7,8,9],[10,11,12]])

np.concatenate((arr1,arr2),axis=0)     
np.vstack((arr1, arr2)) # vertical stack
np.r_[arr1, arr2]    #按行堆叠
#以上三种方式都得到array([[ 1, 2, 3],[ 4, 5, 6],[ 7, 8, 9],[10, 11, 12]])

np.concatenate((arr1,arr2),axis=1)     
np.hstack((arr1, arr2)) # horizontal stack
np.c_[arr1, arr2]    #按列堆叠
#以上三种方式都得到array([[ 1, 2, 3, 7, 8, 9],[ 4, 5, 6, 10, 11, 12]])

#拆分数组
arr = np.random.rand(5,5)
first, second, third = np.split(arr, [1,3], axis=0)    #截成三个数组,在第一个和第三个位置截

#数组形状修改
arr = np.arange(4).reshape(2,2)
# arr = [[0,1],[2,3]]

#元素重复
arr = np.arange(3)
arr.repeat(3)    #得到[0,0,0,1,1,1,2,2,2]
arr.repeat([1,3,5])    #得到[0,1,1,1,2,2,2,2,2]    按元素重复     

arr.repeat(2,axis=0)    
#arr = [[0,1],[0,1],[2,3],[2,3]]
arr.repeat(2,axis=1)    
#arr = [[0,0,1,1],[2,2,3,3]]

#tile贴瓷砖一样重复数组
arr = np.arange(4).reshape(2,2)
np.tile(arr,2)
#得到array([[0, 1, 0, 1],
           [2, 3, 2, 3]])
np.tile(arr,(2,3))
#得到array([[0, 1, 0, 1, 0, 1],
            [2, 3, 2, 3, 2, 3],
            [0, 1, 0, 1, 0, 1],
            [2, 3, 2, 3, 2, 3]])

八.numpy文件输入输出
#save
np.save('some_array', arr)    #已有一个arr保存为some_array.npz
#读取
arr2 = np.load('some_array.npy')

#保存多个
np.savez("array.npz", a=arr, b=arr2, c=arr3)#已有arr1,arr2,arr3,保存在array.npz中,名字为a,b,c
#读取多个
arch = np.load('array_archive.npz') #arch['a'],arch['b'],arch['c']就是对于三个之前保存的数组

#读取txt文件作为数组,间隔号为逗号
arr = np.loadtxt('array_ex.txt', delimiter=',')


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值