numpy基础使用

这篇博客介绍了NumPy库的基础使用,主要聚焦在数组的创建。内容包括如何初始化不同类型的数组,以及可能涉及到的基本操作。通过学习,读者可以掌握在Python中使用NumPy进行高效数值计算的方法。

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

# 数据分析的基础步骤:数据收集,数据处理,数据分析,数据展现
# numpy的安装 pip install numpy
# pandas的安装 pip install pandas
# Matplotlib的安装:pip install matplotlib
#
# jupeter notebook是ipython的升级版 一个Web应用程序 界面更友好 功能也更强大。
# 可创建和共享代码 数据清洗和转换 数值模拟 统计建模 机器学习等等
# jupyter notebook的安装 pip install jupyter
# 启动jupyter notebook

# 数据加载np.genfromtxt
import numpy as np
filename = "./presidential_polls.csv"
data_arr = np.genfromtxt(filename, #需要打开的文件名
    delimiter = "," ,#文件的分隔符
    dtype=str, #数据按字符串格式存储,不进行bytes编码
    usecols = (3,17,18,19),#表示读取文件里列索引位置
    )
print(data_arr)

# 数据存储np.loadtxt
filename = "./presidential_polls.csv"
data_arr = np.loadtxt(filename, #需要打开的文件名
    delimiter = "," ,#文件的分隔符
    #skiprows = 1, #可以选择调过开头指定的行
    dtype=str, #数据是按编码后的字符串格式存储
    usecols = (3,17,18,19),#表示读取文件里的列的索引位置)

1、numpy数组的创建

# 随机抽样生成数组范围[0, 1)
arr1 = np.random.rand(2, 3, 4)
print(arr1)
print(type(arr1))
[[[0.57574486 0.54646636 0.8826699  0.18578644]
  [0.98587593 0.79860098 0.33510005 0.63357311]
  [0.57229583 0.78985357 0.94551367 0.50121632]]

 [[0.54692874 0.93198596 0.27521756 0.77860668]
  [0.72724299 0.29829541 0.96995412 0.01535601]
  [0.85714544 0.47116552 0.77156323 0.51256554]]]
<class 'numpy.ndarray'>
# 随机从标准正太分布中返回一个或多个样本值
arr2 = np.random.randn(2, 3, 4)
print(arr2)
print(type(arr2))
[[[-0.23396039 -0.23336667 -0.30112823 -1.23415798]
  [ 0.91558245  0.12414881  0.15081818 -1.53843735]
  [-0.21620594  0.7359921   0.50092933  0.75558742]]

 [[ 0.32530112  0.73525383  0.37219234  0.21443457]
  [ 0.01752722  2.44692182 -0.69826485 -0.51774681]
  [ 0.46323329  0.50842233 -0.81426621 -1.12823969]]]
<class 'numpy.ndarray'>
# 随机从指定范围中创建对位整型数据
arr3 = np.random.randint(-1, 5, (3, 4))
# arr3 = np.random.randint(-1, 5, size=(3, 4))
print(arr3)
print(type(arr3))
[[ 2  0  2  4]
 [-1  0 -1  4]
 [ 2  3  2  3]]
<class 'numpy.ndarray'>

 

# 生成指定维度大小(3行4列)的随机多维浮点型数据
arr4 = np.random.uniform(-1, 5, (3, 4))
print(arr4)
print(type(arr4))
# ndarray的属性
# 维度个数, 一维 二维 三维
print(arr4.ndim)
# 维度大小(3, 4)
print(arr4.shape)
# 数组里的数据类型 float64
print(arr4.dtype)
[[3.55892155 2.19149605 4.84316689 4.74206393]
 [2.11843647 0.26380823 0.78019315 3.38043045]
 [3.39062911 4.27111334 0.63242528 0.42685677]]
<class 'numpy.ndarray'>
2
(3, 4)
float64
# 自定义数组创建
lis = range(5)
arr5 = np.array(lis)
print(arr5)
print(np.array([range(5), range(5)]))
print(np.array([(1, 2), (3, 4)]))
print(np.array([[1, 2], [3, 4]]))
[0 1 2 3 4]
[[0 1 2 3 4]
 [0 1 2 3 4]]
[[1 2]
 [3 4]]
[[1 2]
 [3 4]]
# 指定大小的全0数组 第一个参数是元组 默认数据类型为float64
zeros_arr = np.zeros((3, 4), dtype='int32')
print(zeros_arr)
# 运行结果:int32
print(zeros_arr.dtype)
[[0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]]
int32
# 指定大小的全1数组 第一个参数是元组 默认数据类型为float64
ones_arr = np.ones((2, 3))
print(ones_arr)
print(ones_arr.dtype)
[[1. 1. 1.]
 [1. 1. 1.]]
float64
# 指定大小的全1数组 第一个参数是元组 默认数据类型为float64
empty_arr = np.empty((3, 3), int)   # 指定数据类型为int
print(empty_arr)
# 运行结果:int32
print(empty_arr.dtype)
[[0 0 0]
 [0 0 0]
 [0 0 0]]
int32
arr6 = np.arange(6)
arr7 = np.arange(6).reshape(2, 3)
# 1x6个元素的一维数组
print(arr6)
# 2x3个元素的 二维数组
print(arr7)
[0 1 2 3 4 5]
[[0 1 2]
 [3 4 5]]

 2、

import numpy as np
# 一维数组的索引与切片 和列表的操作类似
arr1 = np.arange(10)
print(arr1[2:5])    # <class 'numpy.ndarray'>
print(type(arr1[2:5]))    # [2 3 4]
print(arr1[1])
print(type(arr1[1]))    # <class 'numpy.int32'>
[2 3 4]
<class 'numpy.ndarray'>
1
<class 'numpy.int32'>
#  多维数组的索引与切片
arr2 = np.arange(12).reshape(3, 4)
print(arr2)
print(arr2[2][3])   # 索引为(2, 3)的数据
print(arr2[1])  # 索引为1的行 [4 5 6 7]
print(arr2[0:2, 2:])    # 索引为0 1的行和 索引为2-的交叉部分
print(arr2[:, 1:3])     # 索引为1 2的列
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
11
[4 5 6 7]
[[2 3]
 [6 7]]
[[ 1  2]
 [ 5  6]
 [ 9 10]]
# 条件索引  找出 data_arr 中 2005年后的数据
data_arr = np.random.rand(3, 3)
print(data_arr)
year_arr = np.array([[2000, 2001, 2000], [2005, 2002, 2009], [2001, 2003, 2010]])
is_year_after_2005 = year_arr >= 2005
# 返回的是一个3x3的数组 值时bool型 >=2005的索引位置是True 其他的是False
print(is_year_after_2005, is_year_after_2005.dtype)
# 提取is_year_after_2005是True的索引在data_arr中对应的值
print(data_arr[is_year_after_2005])
# 找出 data_arr中2005年前且年份能整除二的年份和数据
filtered_arr1 = year_arr[(year_arr <= 2005) | (year_arr % 2 == 0)]
print(filtered_arr1)
print(data_arr[(year_arr <= 2005) | (year_arr % 2 == 0)])
# print(data_arr[filtered_arr1])
# 找出 data_arr中2005年前或年份能整除二的年份和数据
filtered_arr2 = year_arr[(year_arr <= 2005) & (year_arr % 2 == 0)]
print(filtered_arr2)
print(data_arr[(year_arr <= 2005) & (year_arr % 2 == 0)])
[[0.73953195 0.61348584 0.79242628]
 [0.52146043 0.36660039 0.20184571]
 [0.7044723  0.92653372 0.07748207]]
[[False False False]
 [ True False  True]
 [False False  True]] bool
[0.52146043 0.20184571 0.07748207]
[2000 2001 2000 2005 2002 2001 2003 2010]
[0.73953195 0.61348584 0.79242628 0.52146043 0.36660039 0.7044723
 0.92653372 0.07748207]
[2000 2000 2002]
[0.73953195 0.79242628 0.36660039]

3、

import numpy as np
# 元素计算函数
arr = np.random.randn(2, 3)
print(arr)
print(np.ceil(arr))     # arr的所有元素向上区镇
print(np.floor(arr))    # arr的所有元素向下取整
print(np.rint(arr))     # arr的所有元素四舍五入
print(np.isnan(arr))    # 判断元素是否为 NaN(Not a Number)
print(np.multiply(arr, arr))    # arr对应元素相乘
print(np.divide(arr, arr))      # arr对应元素相除
print(np.where(arr > 0, 1, -1))     # arr中元素大于0为1小于0为-1
[[-2.06506175 -0.50280408  1.45255375]
 [ 1.33348679 -0.7492421   0.90596497]]
[[-2. -0.  2.]
 [ 2. -0.  1.]]
[[-3. -1.  1.]
 [ 1. -1.  0.]]
[[-2. -1.  1.]
 [ 1. -1.  1.]]
[[False False False]
 [False False False]]
[[4.26448002 0.25281195 2.10991241]
 [1.77818701 0.56136372 0.82077252]]
[[1. 1. 1.]
 [1. 1. 1.]]
[[-1 -1  1]
 [ 1 -1  1]]
# 元素统计函数
arr = np.arange(1, 13).reshape(3, 4)
print(arr)
print(np.sum(arr))  # 所有元素的和
print(np.sum(arr, axis=0))  # 数组的按列统计和
print(np.sum(arr, axis=1))  # 数组的按行统计和
print(np.cumsum(arr))   # 返回一个一维数组 每个元素都是之前所有元素的 累加和
print(np.cumprod(arr))  # 返回一个一维数组 数组的每一个元素都是之前所有元素的累加积
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]
78
[15 18 21 24]
[10 26 42]
[ 1  3  6 10 15 21 28 36 45 55 66 78]
[        1         2         6        24       120       720      5040
     40320    362880   3628800  39916800 479001600]
arr = np.random.randint(0, 10, (3, 4))
print(arr)
# 所有元素的平均值与和
print(np.mean(arr))
print(np.sum(arr))
print(np.max(arr))  # 求数组的最大值
print(np.min(arr))  # 求数组的最小值
print(np.var(arr))  # 求方差
print(np.std(arr))  # 求标准差:方差的平方根
[[3 6 7 2]
 [4 4 3 2]
 [8 5 9 4]]
4.75
57
9
2
4.854166666666667
2.203217344400381
# 求最大值和最小值的索引下标 如果是多维数组 将多维数组合并成一维数组 再找出最大值索引下标
arr = np.random.randint(0, 10, (3, 4))
print(arr)
print(np.argmax(arr))
print(np.argmin(arr))
[[5 2 1 2]
 [0 6 1 3]
 [5 4 1 6]]
5
4
# 元素判断函数
arr = np.random.randn(2, 3)
print(arr)
print(np.any(arr > 0))  # 至少有一个元素满足指定条件 返回True
print(np.all(arr > 0))  # 所有的元素满足指定条件 返回True

# 元素判断函数
arr = np.array([[1, 2, 1], [2, 3, 4]])
print(arr)
print(np.unique(arr))   # 找到唯一值并返回排序结果 类似于Python的set集合
[[ 0.46215757  0.64009362  0.26844304]
 [-1.17199175  0.62900237 -0.41159536]]
True
False
[[1 2 1]
 [2 3 4]]
[1 2 3 4]

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值