Numpy常用操作(一)

为什么使用Numpy?
Numpy是Python的基础,更是数据科学的通用语言,且与TensorFlow关系密切,Python本身支持list和 tuple的数据存储,但这些数据结构有很多不足,因列表的元素可以为任意对象,因此列表中所保存的是对象的指针,即使像保存简单的列表[1, 2, 3]都需要有3个指针和3个整数对象,在执行过程中会浪费cpu和内存,tuple 直接保存元素,类似于C语言中的一维数组,但不支持多维,也不支持不同类型的运算函数,因为也不适合做数值运算。因此出现了Numpy 来弥补list和tuple的不足,存在ndarray和ufunc两种基本对象,ndarray是存储单一数据类型的多维数组;ufunc能够对数据进行处理的函数。

Numpy的主要特点

  1. ndarray 快速,节省空间的多维数组。提供数组化的算术运算和高级的广播功能
  2. 使用标准的数学函数对整个数据组进行快速运算,不需要循环处理
  3. 读写磁盘上的阵列数据和操作存储器映像文件的工具
  4. 线性代数,随机数生成,以及傅里叶变换的能力

生成ndarray的几种方式

(一)从已有数据中创建
直接对python的基础数据类型(eg: 列表、元组)进行转换生成ndarray
列表,嵌套列表转换

import numpy as np

list_1 = [1, 2, 3, 4, 5, 6]
np1 = np.array(list_1)
print(np1)  # [1 2 3 4 5 6]

list_2 = [[1, 2, 3, 4, 5, 6], [7, 8, 9, 0, 11, 12]]
np2 = np.array(list_2)
print(np2)  # [[ 1  2  3  4  5  6] [ 7  8  9  0 11 12]]

(二) 利用random生成
random模块分为多种函数: random生成0~1的随机数,uniform生成均匀分布随机数、randn生成标准正态的随机数、normal生成正态分布、shuffle 随机打乱顺序、seed 设置随机数种子等。

import numpy as np
np.random.seed(123)  # 如果使用相同的seed()值,则每次生成的随机数都相同,如果不设置这个值,那么每次生成的随机数不同,并且每次只能seed一次
nd_1 = np.random.randn(2,3)
print(nd_1)

(三)创建特定形状的多维数组
数据初始化时,需要生成特殊矩阵,如0或1得数组或矩阵,使用np.zeros, np.ones, np.diag等实现

import numpy as np

np_1 = np.zeros([3,3])  # 3X3的矩阵   0
print(np_1)
np_2 = np.ones([3,3])  # 3X3的矩阵  1
print(np_2)
np_3 = np.eye(3)  # 3阶单位矩阵
print(np_3)
np_4 = np.diag([1, 2, 3])  # 3阶对角矩阵
print(np_4)
# 数据保存到本地磁盘
np_5 = np.random.random([5,5])
np.savetxt(X=np_5, fname="1.txt")
np_10 = np.loadtxt("1.txt")
print(np_10)

(四)利用arange函数
arange是numpy模块中的常用函数,其格式为: arange(start,stop, step, dtype)
start: 起始数值 stop: 结束数值 step: 步长 可以为小数

import numpy as np

np_1 = np.arange(10)
print(np_1)
np_2 = np.arange(0,10)
print(np_2)
np_3 = np.arange(1, 4, 0.5)
print(np_3)
np_4 = np.arange(9 , -1, -1)
print(np_4)

读取元素
以下是常用获取矩阵元素的方式

import numpy as np

np.random.seed(2018)
np_1 = np.random.random(10)
print(np_1[3])  # 获取第四个元素
print(np_1[3:6])  # 获取第四位到第六位的元素
print(np_1[1:6:2]) # 获取第一位到第五位 每隔两个位置的元素
print(np_1[::-2])  # 倒叙取数
# 截取一个多维数组的一个区域内数据
np_2 = np.arange(25).reshape([5,5])
np_3 = np_2[1:3, 1:3]
print(np_3)
# 截取一个多维数组中,数值在某一个值域之内的数据
print(np_2[(np_2>3)&(np_2 < 10)])
# 获取指定行的数值
print(np_2[[1,2]])
# 获取指定列的数值
print(np_2[:, 1:3])

获取数组中的部分元素除了通过指定索引标签外,还可以使用一些函数实现,例如使用random.choice函数从指定的样本中随机抽取数据

import numpy as np
from numpy import random as nr

np_1 = np.arange(1, 25, dtype=float)
np_2 = nr.choice(np_1, size=(3,4))  #size指定形状
print(np_2)
# replace = True 默认为True False表示不能重复。即False表示不放回取样,True表示放回取样
np_3= nr.choice(np_1, size=(3, 4), replace=False)
print(np_3)
# p代表每个元素抽中的概率,默认每个元素抽中的概率相同
np_4 = nr.choice(np_1, size=(3,4), p= np_1 / np.sum(np_1))
print(np_4)

补充

import numpy as np


# full:创建一个单独值的n维数组。fill_value:填充值。
print(np.full((2, 4), fill_value=2))
# linspace:创建一个具有指定间隔的浮点的数组
print(np.linspace(10, 100, 10))

# min返回最小值
print(np.min(np.array([i for i in range(100)])))

# max返回最大值  mean: 返回平均值    medain: 返回中位数
print(np.max(np.array([i for i in range(100)])))
# sort对数组排序
print(np.sort(np.array([3,4,1, 2, 6,5])))
# abs 返回数组中元素的绝对值
print(np.abs([[1,-3, 4], [-2, -4, 3]]))
# union1d将两个数组合并为一个
print(np.union1d(np.array([1,2,3,4,5]), np.array([6, 7, 8,9, 10])))
# 重复元素,3代表次数
print(np.repeat('00', 3))
# unique: 返回一个所有唯一元素排序的数组
# return_index:如果为True,返回数组的索引
# return_inverse:如果为True,返回唯一数组的下标
# return_counts:如果为True,返回数组中每个唯一元素出现的次数
# axis:要操作的轴。默认情况下,数组被认为是扁平的。
print(np.unique(np.array([1, 2, 3, 4, 5]), return_counts=True))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Enougme

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

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

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

打赏作者

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

抵扣说明:

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

余额充值