Numpy必学基础(numpy基础及数据查询)

Posted 啊~小 l i

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Numpy必学基础(numpy基础及数据查询)相关的知识,希望对你有一定的参考价值。

Numpy的核心数据结构就是array数组,array对象可以是一维数组,array对象可以是多维
Numpy的array和python的list的一个区别,是他们必须都是同一种数据类型,比如都是int类型,
这也是Numpy高性能的原因
  1. array本身属性
    • shape:返回一个元组,表示array的维度
    • ndim:一个数字,表示array的维度数目
    • dtype:array中的元组的数据类型
  2. array的创建
    • 从python的列表list和嵌套列表array
    • 使用预定的函数arrange、ones、ones_like、eye(对角线矩阵)等等
    • 生成随机数的np.random模块构建
  3. array本身支持的大量操作和函数
    • 直接逐元素的加减乘除等算数操作
    • 更好用的面向多维的数组索引
    • 求sum/mean等聚合函数
    • 线性函数、比如求解逆矩阵、求解方程组

  1. 使用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)
  1. 探索array的属性
    • data.shape array的形状(行,列)
    • data.ndim shape的个数,也就是维度
    • data.size array的长度,行*列
    • data.dtype 数据的类型
  2. 创建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)
  3. 使用empty_like创建形状相同的数组
    empty_like(prototype,dtype=None)
    np.empty_like(data)
    np.empty_like(data2)
  4. 使用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]]
  5. 使用full_like创建形状相同的数组
    np.full_like(a,fill_value,dtype=None)
    np.full_like(data,111) # 形状为data的形状,数值为111
    np.full_like(data2,22)
  6. 使用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基础及数据查询)的主要内容,如果未能解决你的问题,请参考以下文章

Numpy基础(day1)numpy基础及数据查询

Python基础 | Numpy详细教程

NumPy数据分析基础:ndarray数组运算基本操作及切片索引迭代

Numpy基础(day2)随机函数及统计函数

Numpy基础(day2)随机函数及统计函数

python中都有哪些包