数据分析——Numpy学习笔记(一)

本文介绍NumPy库的基础知识,包括其优势、基本数据结构ndarray的特性,以及如何创建和操作数组。涵盖数组创建方法如zeros、ones、full、eye、arange和linspace,随机数生成,以及数据类型转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import numpy as np
复制代码
np.__version__
复制代码
'1.15.4'
复制代码

为什么使用numpy

Python中的List

优点:不对存储的数据类型做约束

缺点:性能低,要检查每个元素的类型

L = [i for i in range(10)]
L
复制代码
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
复制代码
L[5]
复制代码
5
复制代码
L[5] = 100
L
复制代码
[0, 1, 2, 3, 4, 100, 6, 7, 8, 9]
复制代码
L[5] = 'welcome to dataAnalysis'
L
复制代码
[0, 1, 2, 3, 4, 'welcome to dataAnalysis', 6, 7, 8, 9]
复制代码

Python中的Array模块

优点:效率高

缺点:只能存一种数据类型,当作二维数组的时候,没有配备看成向量或者矩阵的相应运算

import array 
复制代码
arr = array.array('i', [i for i in range(10)])
arr
复制代码
array('i', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
复制代码
print(arr[5])
type(arr) # 优点,效率高,缺点,只能存一种数据类型,当作二位数组的,没有配备看成向量或者矩阵的相应运算
复制代码
5





array.array
复制代码

Numpy

NumPy 是一个运行速度非常快的数学库,主要用于数组计算

ndarray 对象是用于存放同类型元素的多维数组。

ndarray 中的每个元素在内存中都有相同存储大小的区域。

nparr =np.array([i for i in range(10)])
nparr
复制代码
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
复制代码
type(nparr)
复制代码
numpy.ndarray
复制代码
nparr[5] = 100
nparr
复制代码
array([  0,   1,   2,   3,   4, 100,   6,   7,   8,   9])
复制代码
# numpy.array也不支持不同类型
nparr[5] = 'abc'
nparr
复制代码
---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

<ipython-input-13-9e780ef23fe9> in <module>
      1 # numpy.array也不支持不同类型
----> 2 nparr[5] = 'abc'
      3 nparr


ValueError: invalid literal for int() with base 10: 'abc'
复制代码
# 特殊方法
nparr.dtype
复制代码
dtype('int32')
复制代码
# 进行了一次隐式转换, 截位操作
nparr[5] = 3.78
nparr
复制代码
array([0, 1, 2, 3, 4, 3, 6, 7, 8, 9])
复制代码

机器学习和数据分析需要进行浮点数运算

nparr2 = np.array([1, 2, 3.1])
复制代码
nparr2.dtype
复制代码
dtype('float64')
复制代码
npz = np.zeros(10, dtype=int)
npz
复制代码
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
复制代码
# astype() 转换类型
npz.astype(float)
复制代码
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
复制代码

传入一个元组,矩阵

np.zeros((3, 5))
复制代码
array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])
复制代码
# zeros(shape, dtype=float, order='C')
# 生成 3 X 5 的全 0 矩阵
np.zeros(shape=(3,5),dtype=int)
复制代码
array([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0]])
复制代码
# 生成 3 X 5 的全 1 矩阵
np.ones(shape=(3,5),dtype=int)
复制代码
array([[1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1]])
复制代码
#np.full(shape, fill_value, dtype=None, order='C')
# 生成 3 X 5 的全 fill_value 矩阵
np.full(shape=(3,5),fill_value=666)
复制代码
array([[666, 666, 666, 666, 666],
       [666, 666, 666, 666, 666],
       [666, 666, 666, 666, 666]])
复制代码
np.eye(3)
复制代码
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])
复制代码
np.arange(30)
复制代码
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29])
复制代码
[i for i in range(0, 20, 2)]
复制代码
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
复制代码
# np.arange
np.arange(0, 20, 2)
复制代码
array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18])
复制代码
#np.arange 步长可以为小数
np.arange(0, 1, 0.2)
复制代码
array([0. , 0.2, 0.4, 0.6, 0.8])
复制代码
# linspace [0,20] 的等间距数列
np.linspace(0, 20, 10)
复制代码
array([ 0.        ,  2.22222222,  4.44444444,  6.66666667,  8.88888889,
       11.11111111, 13.33333333, 15.55555556, 17.77777778, 20.        ])
复制代码
np.linspace(0, 20 ,11)
复制代码
array([ 0.,  2.,  4.,  6.,  8., 10., 12., 14., 16., 18., 20.])
复制代码

随机数

# 随机数
import random
复制代码
# 生成0-2之间随机整数,左闭右开
random.randint(0,1)
复制代码
0
复制代码
np.random.randint(0,2) # 左闭右开,不包括2
复制代码
0
复制代码
# randint(low, high=None, size=None, dtype='l')
np.random.randint(0,1,size=10)
复制代码
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
复制代码
# 生成一个 3 X 5列的随机整数矩阵
np.random.randint(0, 10, size=(3, 5))
复制代码
array([[1, 6, 2, 4, 8],
       [6, 2, 8, 0, 5],
       [4, 3, 3, 6, 4]])
复制代码
# 生成随机浮点数
np.random.random() #生成[0,1)之间的浮点数,左闭右开
复制代码
0.2649064457443836
复制代码
# random_sample(size=None)
np.random.random(10) #生成10个
复制代码
array([0.42376454, 0.41423952, 0.31159601, 0.9507154 , 0.78481039,
       0.04563831, 0.2837555 , 0.79517423, 0.07130973, 0.36333672])
复制代码
# 生成一个 3 X 5列的随机浮点数矩阵
np.random.random(size=(3,5)) 
复制代码
array([[0.74372819, 0.19361539, 0.55049249, 0.61318823, 0.59572234],
       [0.52924052, 0.48043406, 0.3182225 , 0.23505616, 0.80289083],
       [0.38699344, 0.73664022, 0.41708906, 0.77655059, 0.16897559]])
复制代码
# 均值为0,方差为1 随机浮点数
np.random.normal()
复制代码
0.17708003261260866
复制代码
# normal(loc=0.0, scale=1.0, size=None)
np.random.normal(loc=10,scale=100) #均值为10 ,方差为100 随机浮点数
复制代码
142.79254007123254
复制代码
# 生成一个 3 X 5列的随机浮点数矩阵
# 均值为10 ,方差为100 随机浮点数
np.random.normal(loc=10,scale=100,size=(3,5))
复制代码
array([[ 141.99356156,  129.65905839, -161.21423339, -138.90031389,
         -64.04098652],
       [ -48.89692419,  -30.48151914,  -95.22605902, -131.9976962 ,
        -123.3116925 ],
       [  -8.08422052,   -9.32540604,   34.75224011, -138.02281502,
         -63.92428487]])
复制代码

复制代码

复制代码

复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值