Numpy必学基础(numpy基础及数据查询)
Posted 啊~小 l i
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Numpy必学基础(numpy基础及数据查询)相关的知识,希望对你有一定的参考价值。
Numpy的核心数据结构就是array数组,array对象可以是一维数组,array对象可以是多维
Numpy的array和python的list的一个区别,是他们必须都是同一种数据类型,比如都是int类型,
这也是Numpy高性能的原因
- array本身属性
- shape:返回一个元组,表示array的维度
- ndim:一个数字,表示array的维度数目
- dtype:array中的元组的数据类型
- array的创建
- 从python的列表list和嵌套列表array
- 使用预定的函数arrange、ones、ones_like、eye(对角线矩阵)等等
- 生成随机数的np.random模块构建
- array本身支持的大量操作和函数
- 直接逐元素的加减乘除等算数操作
- 更好用的面向多维的数组索引
- 求sum/mean等聚合函数
- 线性函数、比如求解逆矩阵、求解方程组
- 使用python的list和嵌套list创建一维的array和二维的array
import numpy as np
# 创建一个一维数组也就是一个list
data = np.array([1, 2, 3, 4])
print(data)
data2 = np.array([[1, 2, 3], [6, 7, 9]])
print(data2)
- 探索array的属性
- data.shape array的形状(行,列)
- data.ndim shape的个数,也就是维度
- data.size array的长度,行*列
- data.dtype 数据的类型
- 创建array的便捷函数
- 使用arrange创建数字序列
arrange([start,]stop[,step],dtype=None)
np.arange(10) # [0 1 2 3 4 5 6 7 8 9]
np.arange(2,10) # [2 3 4 5 6 7 8 9]
- 使用ones创建全1的数组
使用np.ones(shape,dtype=None,order=‘C’)
np.ones(3)
np.ones((2,3))
- 使用ones_like创建形状相同的数组
ones_like(shape,dtype=float,order=‘C’)
np.ones_like(data)
np.ones_like(data2)
- 使用arrange创建数字序列
- 使用empty_like创建形状相同的数组
empty_like(prototype,dtype=None)
np.empty_like(data)
np.empty_like(data2)
- 使用full创建指定值的数组
np.full(shape,fill_value,dtype=None,order=‘C’)
np.full(5,10) # [10 10 10 10 10]
np.full((2,5),10) # [[10 10 10 10 10] [10 10 10 10 10]]
- 使用full_like创建形状相同的数组
np.full_like(a,fill_value,dtype=None)
np.full_like(data,111)
# 形状为data的形状,数值为111
np.full_like(data2,22)
- 使用random模块生成随机数的数组
randn(d0,d1,…,dn) -> 一个数字代表一维,两个数字代表二维,三个数字代表三维…
np.random.randn()
1.3802833051119325
np.random.randn(3)
[-0.83672675 -0.11191481 0.19023215]
np.random.randn(3,2)
[[-0.81229076 -0.62183332]
[ 0.13601261 2.16362712]
[ 1.2849943 -0.35765882]]
np.random.randn(3,2,4)
[[[-0.10814489 -0.72364576 1.37805339 -2.08965675]
[ 0.35606693 -1.44720615 0.0533389 -1.1018893 ]]
[[ 1.51753369 -1.38437053 0.25122891 1.21252821]
[-0.5962839 -0.39590415 1.68435145 -1.60479922]]
[[-0.09904827 -1.86284729 0.33848169 -0.66453044]
[-0.41008066 0.09939961 -0.63705405 -0.72669122]]]
numpy对数组按索引查询
import numpy as np
x = np.arange(10)
print(x)
X = np.arange(20).reshape(4,5)
print(X)
- 基础索引
和python的List
一维数组
x[1],x[2]
和数组一致,从下标0开始
x[-2]
从后往前数第二个
x[0:3]
从第0位到第三位
x[0:-1]
从第0位到倒数第一位
x[:-3]
从第0位到倒数第三位
二维数组
X[1][1]
第二行的第二个元素
X[-1]
最后一列
X[1]
第二列
X[:2,2:4]
前两行的3,4列 - 神奇索引
用整数数组进行的索引
一维数组
x[[3,4,7]]
返回三个数字所在的位置
index = np.array([[0,2],[1,3]])
x[index]
同样返回一个二维数组,数组里面是0,2,1,3对应的下标
demo : 获取数组中最大的前N个数字
# 随机生成1-100之间的10个数字
arr = np.random.randint(1, 100, 10)
print(arr)
# arr.argsort()会返回排序后的索引index
# 取到最大的三个的下标
arr.argsort()[-3:]
arr[arr.argsort()[-3:]]
二维数组
X = np.arrange(20).reshape(4, 5)
筛选多行列可省略
X[[0,2]]
X[[0,2], :]
筛选多列,行不能省略
X[:, [0,2,3]]
同时指定行列,返回对应位置的数字
X[[0, 2, 3], [1, 3, 4]]
(0,1)(2,3)(3,4)的位置
- 布尔索引
布尔索引选择的是数组的拷贝
一维数组和二维数组类似
x = np.arrange(10)
x>5 # 小于五的部分为false,大于5的为true
x[x>5] # 返回一个大于5组成的一维数组
# 大于5的赋值为0 小于5的为1
x[x<=5]=0
x[x>5]=1
x[x<5]+=20 # 小于5的数字加20
- 条件组合
x = np.arrange(10)
condition = ((x%2==0) | (x>7)) # 每一个都加小括号
print(condition) # 满足条件的数字变为true不满足为false
print(x[cofition]) # 满足条件的数字
以上是关于Numpy必学基础(numpy基础及数据查询)的主要内容,如果未能解决你的问题,请参考以下文章