Numpy基础用法示例

Numpy是一个很适合作为矩阵运算的python库,在机器学习中会经常使用到。底层使用C语言封装,效率比Python原生计算高很多!

基础用法

#Numpy数组对象
import numpy as np 
#构造一个0-5,不包含5的一维数组
a = np.arange(5)
print(a)
#查看数组类型
print(a.dtype)
#查看维度
print(a.shape)

输出内容:
[0 1 2 3 4]
int64
(5,)
    
#多维数组
m = np.array([np.arange(2),np.arange(2)])
print(m)
print(m.shape)
print(m.dtype)
#根据索引下标获取具体数据
print(m[0,0])
#每一种数据均有对应的类型转换函数
print(np.float64(42))
#numpy数组中每个元素均为相同的数据类型
print(m.dtype.itemsize)

输出内容:
[[0 1]
 [0 1]]
(2, 2)
int64
0
42.0
8
#字符编码,numpy可以用字符编码来标识数据类型,例如f表示单精度浮点数
np.arange(7,dtype='f')

输出内容:
array([0., 1., 2., 3., 4., 5., 6.], dtype=float32)
#一维数组的索引和切片
a = np.arange(9)
print(a)
#截取3-7位
print(a[3:7])
#逆序输出
print(a[::-1])

输出内容:
[0 1 2 3 4 5 6 7 8]
[3 4 5 6]
[8 7 6 5 4 3 2 1 0]
#多维数据的索引和切片
b = np.arange(24).reshape(2,3,4)
print(b)
#检索二三维都为0的一维数据元素
print(b[:,0,0])
#.flatten()把多维的数组改成一维数据
print(b.flatten())
#转置,原先是(2,3,4)转为(4,3,2)
print(b.transpose())
#resize会直接修改数组,而其他操作不会直接修改数组
b.resize(2,12)
print(b)
#2*矩阵,会把矩阵对应的位置值都乘以2
print(2*b)

输出内容:
[[[ 0  1  2  3]
      [ 4  5  6  7]
      [ 8  9 10 11]]
    
     [[12 13 14 15]
      [16 17 18 19]
      [20 21 22 23]]]
      
    [ 0 12]
    [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
    
    [[[ 0 12]
      [ 4 16]
      [ 8 20]]
    
     [[ 1 13]
      [ 5 17]
      [ 9 21]]
    
     [[ 2 14]
      [ 6 18]
      [10 22]]
    
     [[ 3 15]
      [ 7 19]
      [11 23]]]
      
    [[ 0  1  2  3  4  5  6  7  8  9 10 11]
     [12 13 14 15 16 17 18 19 20 21 22 23]]
    [[ 0  2  4  6  8 10 12 14 16 18 20 22]
     [24 26 28 30 32 34 36 38 40 42 44 46]]
#hstack合并操作
import numpy as np
a = np.arange(9).reshape(3,3)
print(a)
b = 2*a
print(b)
#水平合并
print("水平合并:\n",np.hstack((a,b)))
#垂直合并
print("垂直合并:\n",np.vstack((a,b)))
#也可用concatenate方法来水平和垂直合并,1代表水平,0代表垂直
print("水平合并:\n",np.concatenate((a,b),axis = 1))
print("垂直合并:\n",np.concatenate((a,b),axis = 0))

输出内容:
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[[ 0  2  4]
 [ 6  8 10]
 [12 14 16]]
水平合并:
 [[ 0  1  2  0  2  4]
 [ 3  4  5  6  8 10]
 [ 6  7  8 12 14 16]]
垂直合并:
 [[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 0  2  4]
 [ 6  8 10]
 [12 14 16]]
水平合并:
 [[ 0  1  2  0  2  4]
 [ 3  4  5  6  8 10]
 [ 6  7  8 12 14 16]]
垂直合并:
 [[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 0  2  4]
 [ 6  8 10]
 [12 14 16]]
#数组的分割
import numpy as np
a = np.arange(9).reshape(3,3)
print(a)
#水平分割,注意维度一定要符合,否则报错
print(np.hsplit(a,3))
#垂直分割
print(np.vsplit(a,3))
#ndim可以打印出数组的维度
print(a.ndim)
#itemsize输出array元素的字节数
print(a.itemsize)
#nbytes可以输出比特数
print(a.nbytes)
#T代表矩阵的转置
print(a.T)

输出内容:
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[array([[0],
       [3],
       [6]]),
array([[1],
       [4],
       [7]]), 
array([[2],
       [5],
       [8]])]
[array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]
2
8
72
[[0 3 6]
 [1 4 7]
 [2 5 8]]
#数组的转换
#tolist可以转成python列表
print(a.tolist())
#转换数组时指定数据类型
print(a.astype(np.int32))

输出内容:
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
[[0 1 2]
 [3 4 5]
 [6 7 8]]

import numpy as np
a = np.arange(-5,5)
signs = np.sign(a)
print(a)
#sign函数代表符号函数,负数为-1,正数为1,0则为0
print(signs)
#zeros_like表示生成一个与元数组相同格式的全0数组
print(np.zeros_like(a))

输出内容:
[-5 -4 -3 -2 -1  0  1  2  3  4]
[-1 -1 -1 -1 -1  0  1  1  1  1]
[0 0 0 0 0 0 0 0 0 0]
#生成3维对角矩阵
b = np.eye(3)
print(b)
#flat进行展开显示操作b
list(b.flat)

输出内容:
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
[1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]

算数运算

from __future__ import division

a = np.array([2,6,5])
b = np.array([1,2,3])
#矩阵相除
print(np.divide(a,b))
print(np.divide(b,a))
#引入__future__ 即可直接使用/进行相除
print(a/b)
print(a//b)

输出内容:
    [2.         3.         1.66666667]
    [0.5        0.33333333 0.6       ]
    [2.         3.         1.66666667]
    [2 3 1]
a = np.arange(-4,4)
#mod取余运算
print(np.mod(a,2))
print(a%2)

输出内容:
    [0 1 0 1 0 1 0 1]
    [0 1 0 1 0 1 0 1]

常用函数

import numpy as np
#随机生成10个元素的数组
h = np.random.randn(10)
print(h)
#np.max获取最大的数
print("max num:{}".format(np.max(h)))
#np.min获取最小的数
print("min num:{}".format(np.min(h)))
#np.median获取中间值
print("media num:{}".format(np.median(h)))
#msort函数可以进行排序
print("sort:{}".format(np.msort(h)))
#mean求均值
print("均值 mean:{}".format(np.mean(h)))
#var求方差
print("方差 var:{}".format(np.var(h)))
#sqrt求根号
print("根号 sqrt:{}".format(np.sqrt(np.var(h))))

输出内容:
    [-1.66649735 -0.52701457  0.06060395  0.25293509 -0.17131163 -0.43367592
      1.29385021  1.74423727  0.46241931  0.35674986]
    max num:1.7442372690237153
    min num:-1.6664973538238412
    media num:0.15676952115447276
    sort:[-1.66649735 -0.52701457 -0.43367592 -0.17131163  0.06060395  0.25293509
      0.35674986  0.46241931  1.29385021  1.74423727]
    均值 mean:0.13722962208616798
    方差 var:0.8209223673422054
    根号 sqrt:0.9060476628424166
#条件查询
a = np.arange(10)
print(a)
#可设定where条件
indices = np.where(a>5)
#使用take(数据,条件)查询
print(np.take(a,indices))
#argmin 最小值索引
print(np.argmin(a))
#argmax 最大值索引
print(np.argmax(a))

输出内容:
    [0 1 2 3 4 5 6 7 8 9]
    [[6 7 8 9]]
    0
    9
#生成一个全是1的数组,数量为5
a = np.ones(5)
print(a)
#将数组值全部替换成5
a.fill(5)
print(a)
#生成一个两行三列的全是1的矩阵数组
b = np.ones(shape=(2,3),dtype=np.int32)
print(b)

输出内容:
    [1. 1. 1. 1. 1.]
    [5. 5. 5. 5. 5.]
    [[1 1 1]
     [1 1 1]]
import numpy as np
a = np.arange(9)
print(a)
b = np.arange(9)
#np.dot 如果是一维数据就是点积,二维数据就是矩阵乘积
print(np.dot(a,b))

a = a.reshape(3,3)
b = b.reshape(3,3)
print(a)
print(np.dot(a,b))

输出内容:
    [0 1 2 3 4 5 6 7 8]
    204
    [[0 1 2]
     [3 4 5]
     [6 7 8]]
    [[ 15  18  21]
     [ 42  54  66]
     [ 69  90 111]]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值