numpy

numpy提供了一种核心的数据类型,为N维数组类型——ndarry

数组的创建

自定义数组array() 通过列表传递数组

import numpy as np
a =np.array([1,2,3,4])
b = np.array([[1,2],[3,4]])
print(a)
print(b)
---------
[1 2 3 4]
[[1 2]
 [3 4]]
---------

注意:

必须传入列表一个列表,np.array([1,2],[3,4])会报错

二维数组需保证每个列表内的元素个数相同,不会自动填充空值。

递增数组 arange() 同range()

arange(启示值,终止值,步长)

range步长为整数型

arange步长可为浮点型,且

a = np.arange(1,10,0.5)
print(a)
print(type(a))
--------------
[1.  1.5 2.  2.5 3.  3.5 4.  4.5 5.  5.5 6.  6.5 7.  7.5 8.  8.5 9.  9.5]
<class 'numpy.ndarray'>

初始化数组 one/one_like 创建一个值全为1的数组

a = np.ones(shape = (10,2)) #创建一个10行两列,值全部为1的数组
b = np.ones_like(a)
print(a)
print(b)
------------------
[[1. 1.]
 [1. 1.]
 [1. 1.]
 [1. 1.]
 [1. 1.]
 [1. 1.]
 [1. 1.]
 [1. 1.]
 [1. 1.]
 [1. 1.]]
[[1. 1.]
 [1. 1.]
 [1. 1.]
 [1. 1.]
 [1. 1.]
 [1. 1.]
 [1. 1.]
 [1. 1.]
 [1. 1.]
 [1. 1.]]

函数

描述

ones/ones_like

初始化为1的数组

ones(shape =(行数,列数))

ones_like(ndarray对象)

zero/zeros_like

初始化为0的数组

empty/empty_like

未初始化的值

full/full_like

初始化为填充值

full(shape=(行数,列数),fill_value='文本或数字')

full((5,2),'文本或数字')

什么是未初始化的值?31:32

数组(ndarry)和列表(list)

  • list科存储不同type的元素,ndarry只能储存相同type的元素

  • list需要单独取数出来计算(通过循环),ndarry可进行矢量化运算及广播计算

  • ndarry存储空间小,计算速度快

*广播计算

2*3的列表如何与1*3的列表进行计算?将1*3的列表向下复制填充为2*3的列表即可。

相关属性

ndim 返回数组维度

shape返回数组形状,边界

a = np.array([[1,2,3,2],[3,4,5,6],[5,5,6,7]])
print(a.shape)
print(type(a.shape))
print(a.shape[0])  #打印a有几行
print(a.shape[1])  #打印a有几列

------------------
(3, 4)
<class 'tuple'>
3
4

dtype 返回数据类型

ndarray 的存储只能为同一数据类型

数据类型:

在创建数组时,可以用dtype来只id那个元素类型,

如果没有指定,则会根据元素类型自行推断

前后顺序影响数据类型

拓展讲解

size 返回数组中所有元素的个数

itemsize 返回数组中每个元素占用的空间大小

相关方法

astype() 对ndarray进行数据转换

此函数不会对原对象进行修改,而是返回一个新的对象

a = np.array([[1,2,3,2],[3,4,5,6],[5,5,6,7]])
print(a.astype(np.cfloat))
print(a.dtype)
------------
[[1.+0.j 2.+0.j 3.+0.j 2.+0.j]
 [3.+0.j 4.+0.j 5.+0.j 6.+0.j]
 [5.+0.j 5.+0.j 6.+0.j 7.+0.j]]
int32

reshape()

a = [1,2,3,4,5,6,7,8,9,0,1,2]
np.reshape(a,(3,4))
print(np.reshape(a,(3,4)))
print(type(np.reshape(a,(3,4))))
-------------------
[[1 2 3 4]
 [5 6 7 8]
 [9 0 1 2]]
<class 'numpy.ndarray'>

numpy中,很多方法和函数都是通用的

上述例子中,a 为一个列表,非ndarray对象,所以采用np.shape(对象,(行数,列数))方法

如果某arr为ndarray对象,可直接用arr.reshape()来进行处理

元素访问

索引与切片

取单行:a[1]

取连续多行:a[0:2]

取不连续的多行:a[[0,1,3]]

取单列:a[:,0]

取连续多列:a[:,0:2]

取不连续多列:a[:,[0,1,3]]

取多个不相邻的点a[[0,1],[2,3],[3,4]]

a = [1,2,3,4,5,6,7,8,9,0,1,2]
b = np.reshape(a,(3,4))
print(b)
print(b[1,2])
print(b[0:2,1:3])
print(b[0:2,2])
--------------
[[1 2 3 4]
 [5 6 7 8]
 [9 0 1 2]]
7
[[2 3]
 [6 7]]
[3 7]

整数数组进行索引

布尔数组进行索引

提供一个布尔类型的数组b,来对目标数组a进行索引,如果b中的值为true,则选取a中的元素,如果为false,则不选取

a[(a>10) & (a<12)]

当为多条件时,使用&和|并用括号分块,取反为~

1、选择大于10的数字

2、将所有大于10的数字都设置为0

a = np.reshape([1,2,3,400,5,1111,7,8,9,0,1,2],(3,4))
b = a[a>10]
print(b)
----------
[ 400 1111]
a = np.reshape([1,2,3,400,5,1111,7,8,9,0,1,2],(3,4))
a[a>10] = 0
print(a)
-----------
[[1 2 3 0]
 [5 0 7 8]
 [9 0 1 2]]

扁平化

np.ravel/ravel 返回视图,如果对新元素进行修改,原数组内的值也会修改

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

flatten 返回拷贝 如果对新元素进行修改,原数组内的值不会修改

order参数

reshape、array中,都存在order参数,尤其是reshape,其原理是先将原数组扁平化,再进行重排。

order分为"C"模式和"F"模式

C模式是从左到右,依次存储。()

F模式是从上到下,依次存储

通用函数ufunc(universal function)

numpy是python计算的矢量化版本

abs/fabs

ceil/floor 往上取整/往下取整

统计函数(聚合函数)

mean/sum 平均值/求和

max/min

argmax/argmin 最大值所在的索引的位置,最小值所在的索引的位子

std/var

cumsum/sumprod

重点:以上函数都可通过axis控制按行或者按列统计

a = np.array([[1,2,3],[4,5,6]])
print(a.sum(axis=0))
-------------
[5 7 9]

数组的连接与拆分

np.concatenate((a,b,c,d),axis = 0)

对多个数组按指定轴的方向进行连接

np.vstack/np.hstack

对数组进行连接 vstack 相当于concatenate(axis = 0) hstack相当于concatenate(axis = 1)

np.split(ary,indices_or_sections,axis = 0)/np.vsplit/np.hsplit

当indices_or_sections为一个数字时,表示等分

当为列表时,表示按固定行/列切片

其他函数(方法)

np.transpose

np.sort/x.sort np.sort()会返回一个新数组,x.sort不会对原对象进行修改

argsort返回原数组中排序的角标(应用:根据索引提取元素)

a = np.array([2,3,1,10,4])
print(a)
print(np.sort(a))
print(np.argsort(a))
print(a[np.argsort(a)[-2:]])
----------------
[ 2  3  1 10  4]
[ 1  2  3  4 10]
[2 0 1 4 3]
[ 4 10]

unique 去重且进行升序排列

np.where 类似if语句

np.where(condition,[x,y]) 当条件为真,返回x,反之返回y

np.where(x>y,x,y)

a = np.array([2,3,1,10,4])
b = np.array([109,2,0,222,3])
print(np.where(a>b,a,b))
-----------------
[109   3   1 222   4]

np.save(file: str, arr: Union[ndarray, Iterable, int, float])

np.load(file: str)

np.savetxt() 文本存储只能保存一维及二维的数据

np.loadtxt()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值