numpy库的常用命令 (二)

一、数组的属性

数组对象具有如下常用属性

ndim:n-dimension ,维度

shape: 形状,每个维度上相应长度

dtype: : 数据类型

size: 数组元素的个数

itemsize: 一个数组元素占用内存空间,字节为单位

import numpy as np


x=np.array([1,2,3])
display(x.ndim)

y=np.array([[1,2,3],[2,3,4]])
display(y.ndim)   # 返回数组的维度
display(y.shape)  # 返回对象的形状,每个维度上的长度    元组
display(y.dtype)   # 返回数据的类型
display(y.size)   # 返回数组里面元素的个数
display(y.itemsize)   #  返回一个元素占用内存空间 ,字节为单位

二、数组类型及转换

创建数组的时候,可使用dtype指定数组中元素的类型

如果没指定,根据元素类型进行推断

如果类型不同,会选择兼容类型

使用astype函数转换数据类型

import numpy as np

# 使用dtype指定数组中元素的类型
x=np.array([1,2,3],dtype=np.float32)
display(x.dtype)

# 如果没指定,根据元素类型进行推断
y = np.array([1,2,3,4,5])
display(y.dtype)

#  使用astype函数转换数据类型
w = np.array([1.1,2.3,4,5,6,-1])
display(w.dtype)
m = w.astype(np.int64)
display(m)

三、改变数组形状

我们可以通过数组对象的reshape方法(或者np的reshape函数) 改变数组形状。说明:

nump中很多方法,即可以用np来访问,也可以通过数组对象来访问

import numpy as np


# 一维数组改成多维数组
x = np.arange(6)
display(x)
y = x.reshape((3,2))   #  注意 元素总和与一开始元素总和一样
display(y)


# 多维数组改成一维数组
x = np.array([[1,2],[2,3],[3,4]])
display(x)
# y = x.reshape(1,6)  # 换成一维数组的  第一种方法
y= x.reshape(-1)   #   第二种方法
display(y)
# 注意 np.reshape 方法,只能使用元组传入,不能分开传入
w = np.reshape(x,(-1))
display(w)

四、索引与切片

在python中,序列类型支持索引与切片。 ndarray 数组也支持类似的操作。不过两者之前既有相同点,也有不同点

相同点: 数组对象也支持索引与切片,语法python 中索引与切片类似

不同点: 数组切片返回的原数组数据视图。如果需要复制底层数组元素,可使用数组对象copy方法

注意: 视图共享底层数组元素

# 索引访问
x = np.arange(9).reshape(3,3)
display(x)
# 从低维获取数据
# x是二维数组,包含低维和高维,
display(x[0][1])
display(x[1,2])


# 切片访问
x = np.arange(9).reshape(3,3)
display(x)


# 3 4 5
# 6 7 8
display(x[1:3])


# 3 4
# 6 7
display(x[1:3,0:2])

# 0 1  2
# 6 7  8

display(x[0:3:2])




# 切片得到新的数组,和原有的数组共享底层内存中的数据,修改一方都会影响对方的数据
# 可以通过数组对象的copy方法得到新的数组,新的数组和原有数组之间不共享数据
x = np.array([1,2,3])

w = x.copy()
w[0]=300
display(w)


# 对列表切片操作,使用浅拷贝,修改新的列表不会影响原有的列表
li = [1,2,3]
li2 = li[:]
li2[0]=10
display(li)
display(li2)

五、整数数组进行索引

当选取元素不连续时候,可以提供一个索引数组选择(或者修改)对应索引位置元素

说明:

通过整数数组索引,返回的是原数组拷贝

可以提供多个一维数组索引,此时会将每个数组对应作为索引,返回对应的元素

x = np.arange(20).reshape(5,4)
display(x)
# 获取第0 2 3 行,不连续的数据
# y = x[[0,2,3]]
# display(y)
# y[0][0]=100
# display(y)
# 返回数据为 0    2   8    10
#(0,0)  (0,2)   (2,0)   (2,2)  >>   [0,0,2,2]   [0,2,0,2]
y = x[[0,0,2,2],[0,2,0,2]]

display(y)

六、布尔数组进行索引

我们可以通过布尔数组对数组进行索引,获取对应的元素,获取数据原则::为True,获取对应位置,为False,不获取。

说明:

索引布尔数组通过对现有数组计算得到

逻辑运算符和python 不同: and ->& ,or ->|,not->~,条件组合时候,条件需用小括号

x =np.arange(12).reshape(4,3)
display(x)
# 使用布尔数组获取第0行 1行数据
y =x[[True,True,False,False]]
display(y)
# 大于5 的数
z =x[x>5]
display(z)
# 大于1 小于6
y1=x[(x>1) & (x<6)]
display(y1)

 

七、数组扁平化  (多维变成一维数组)

我们可以通过调用ravel 或flatten的方法,对数组对象进行扁平化处理

  1. np.ravel/ravel
  2. flatten 两者区别在于,ravel返回数组原数组共享数据,而flatten返回原数组拷贝 (ravel: 新数组改变,原数组也改变, flatten 新数组改变,原数组不改变)
x = np.arange(12).reshape(3,2,2)
display(x)
# 扁平化  把多维变成一维
# y=x.ravel()
y = np.ravel(x)
y[0]=2
display(y)

y1 =x.flatten()
y1[0]=10
display(y1)

八、数组存储顺序

在创建数组时,我们可以通过order参数指定数组元素存储顺序。存储顺序分为两种:

  1. C:安装行存储
  2. F:安装列存储 说明: order参数作用于两个步骤:一是数据抽取(扁平化处理)顺序;二是数据构建(数组填充)顺序
x = np.array([1,2,3,4]).reshape((2,2),order='C')
y= np.array([1,2,3,4]).reshape((2,2),order='F')
display(x)
display(y)


x = np.array([[1,2,3,4],[2,3,4,5]]).reshape((4,2),order='C')
y= np.array([[1,2,3,4],[2,3,4,5]]).reshape((4,2),order='F')
display(x)
display(y)

九、通用函数ufunc(universal function)

Numpy 提供很多通用函数,他可以看做对应python计算向量化版本

  1. abs/fabs
  2. cell/floor
  3. exp
  4. log/log2/log10
  5. modf : 整数和小数部分 小数在前 整数在后
  6. sin/sinh/cos/cosh
  7. sqrt
x = np.array([-1,-2,1])
display(x)
y=np.abs(x)
display(y)  
    

十、统计函数

Numpy具有如下常用统计函数

  1. mean/sum 均值/和

  2. max/min 最大值/最小值

  3. argmax/argmin 最大值对应的索引值/最小值对应的索引值

  4. std/var 标准差/方差

  5. cumsum/cumprod 累加和/累乘

    注意: 统计函数如果只传入数组对象的话,他会对数组首先进行一个扁平化处理,在对扁平化后的一维数组的所有数据进行统计

十一:轴(axis)

可以指定axis参数改变统计的轴。在二维数组中,0表示竖直方向操作,1表示沿水平方向操作 超过二维的多维数组,轴相对复杂,可认为沿着轴所指定坐标变化方向,进行操作。比如轴是0,则根据第0个坐标变化方向

  1. 为什么统计函数需要传入axis参数
  2. 如何理解axis,特别数组维度超过2的时候 语文 数学 zs 90 92 ls 85 100
scores = np.array([[90,92],[85,100]])
#      0表示竖直方向操作,1表示沿水平方向操作 
display(np.max(scores,axis=0))

十二、连接和拆分函数

  1. np.concatenate 对多个数组按指定轴方向进行连接
  2. np.vstack/np.hstack 竖直方向连接/水平方向连接
  3. np.split/np.hsplit/np.vsplit

十三、其他函数

  1. any/all : 0 和 None,返回False 其他返回True
  2. transpose : 对数组数据进行转置
  3. dot :对矩阵乘法进行运算
  4. np.sort : 数组内容排序
  5. np.argsort :数组里面元素对应的索引排序
  6. np.tile : 复制

十四、归一化矩阵

将矩阵值转化为0到1区间

  1. 归一化公式: x-min/max-min (min,max指的是每列的最大值最小值) 其中: max 为每列最大值,min为每列最小值

90 1

80 2

70 2

min 70 1

max 90 2

x = np.array([[90,1],[80,2],[70,2]])
display(x)
# 得到0方向最大值
max = x.max(axis=0)
# 得到0 方向最小值
min = x.min(axis=0)
# 得到max-min 的范围值
range = max - min

# 矩阵元素减去min在0方向的复制,除以范围在0方向的复制
shape = x.shape
y = x -np.tile(min,(shape[0],1))
y = y/np.tile(range,(shape[0],1))
y

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

allen wy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值