Numpy基本使用方法

第一节

创建数组

import numpy as np
import random # 创建数组
a = [1, 2, 3, 4, 5]
a1 = np.array(a)
print(a1) # [1 2 3 4 5]
b = range(10)
b1 = np.array(b)
print(b1) # [0 1 2 3 4 5 6 7 8 9]

数组的类名

# 数组的类名
print(type(a1)) # <class 'numpy.ndarray'>
print(type(b1)) # <class 'numpy.ndarray'>

数据的类型

# 数据的类型
print(a1.dtype) # int32
c1 = np.array([random.random() for i in range(10)])
print(c1)
# [0.65076793 0.78410146 0.94405112 0.58741766 0.23018049 0.80708392 0.5297858 0.14736833 0.53402873 0.21310533]
print(c1.dtype) # float64
d1 = np.array([True, False, False, True])
print(d1.dtype) # bool

指定数组类型

# 指定数组类型
a2 = np.array(a, dtype=float)
print(a2.dtype) # float64
a3 = np.array(a, dtype="float")
print(a2.dtype) # float64

修改数组类型

# 修改数组类型
d2 = d1.astype(int)
print(d2) # [1 0 0 1]
print(d2.dtype) # int32
a4 = a1.astype(dtype="float")
print(a4) # [1. 2. 3. 4. 5.]
print(a4.dtype) # float64

修改浮点型小数位

# 修改浮点型小数位
print(c1)
# 156 0.41847005 0.27127742 0.59553829 0.40378794 0.90308214 0.86897877 0.20906481 0.1832515]
c2 = c1.round(2) # 保留两位小数
print(c2)
# [0.35 0.78 0.93 0.63 0.81 0.15 0.95 0.21 0.29 0.48]

完整代码

import numpy as np
import random # 创建数组
a = [1, 2, 3, 4, 5]
a1 = np.array(a)
print(a1) # [1 2 3 4 5]
b = range(10)
b1 = np.array(b)
print(b1) # [0 1 2 3 4 5 6 7 8 9] # 数组的类名
print(type(a1)) # <class 'numpy.ndarray'>
print(type(b1)) # <class 'numpy.ndarray'> # 数据的类型
print(a1.dtype) # int32
c1 = np.array([random.random() for i in range(10)])
print(c1)
# [0.65076793 0.78410146 0.94405112 0.58741766 0.23018049 0.80708392 0.5297858 0.14736833 0.53402873 0.21310533]
print(c1.dtype) # float64
d1 = np.array([True, False, False, True])
print(d1.dtype) # bool # 指定数组类型
a2 = np.array(a, dtype=float)
print(a2.dtype) # float64
a3 = np.array(a, dtype="float")
print(a2.dtype) # float64 # 修改数组类型
d2 = d1.astype(int)
print(d2) # [1 0 0 1]
print(d2.dtype) # int32
a4 = a1.astype(dtype="float")
print(a4) # [1. 2. 3. 4. 5.]
print(a4.dtype) # float64 # 修改浮点型小数位
print(c1)
# 156 0.41847005 0.27127742 0.59553829 0.40378794 0.90308214 0.86897877 0.20906481 0.1832515]
c2 = c1.round(2) # 保留两位小数
print(c2)
# [0.35 0.78 0.93 0.63 0.81 0.15 0.95 0.21 0.29 0.48]

第二节

数组的形状

import numpy as np

# 数组的形状
a = np.array([[3, 4, 5, 6, 7, 8], [4, 5, 6, 7, 8, 9]])
print(a.shape) # (2, 6) 2行6列

修改数组的形状

# 修改数组的形状
a1 = a.reshape(3, 4) # 修改为3行4列
print(a1.shape) # (3, 4) 3行4列
print(a1)
"""
[[3 4 5 6]
[7 8 4 5]
[6 7 8 9]]
"""
print(a.shape) # (2, 6) 修改数组形状会指向新的对象,不会修改原数组本身

把数据转换成一维数组

# 把数据转换成一维数组
a2 = a.flatten()
print(a2) # [3 4 5 6 7 8 4 5 6 7 8 9]

数组的计算/广播机制,在运算过程中加减乘除的值被广播到所有元素上

# 数组的计算/广播机制,在运算过程中加减乘除的值被广播到所有元素上
b = a*10
print(b) # [[30 40 50 60 70 80][40 50 60 70 80 90]] c = np.arange(20)
print(c) # [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
c1 = c.reshape(4, 5)
print(c1)
"""
[[0 1 2 3 4]
[5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
"""
d = np.array([1, 1, 1, 1, 1])
d1 = d.reshape(1, 5)
print(d1) # [[1 1 1 1 1]] (1, 5) print(c1 - d1)
"""
所有元素全部 -1,即所有行全部减d1这个1行5列的数组
[[-1 0 1 2 3]
[4 5 6 7 8]
[9 10 11 12 13]
[14 15 16 17 18]]
""" # 广播的原则:如果两个数组的后缘维度(trailing dimension,即从末尾开始算起的维度)的轴长度相符,或其中的一方的长度为1,则认为它们是广播兼容的。广播会在缺失和(或)长度为1的维度上进行。

完整代码

import numpy as np

# 数组的形状
a = np.array([[3, 4, 5, 6, 7, 8], [4, 5, 6, 7, 8, 9]])
print(a.shape) # (2, 6) 2行6列 # 修改数组的形状
a1 = a.reshape(3, 4) # 修改为3行4列
print(a1.shape) # (3, 4) 3行4列
print(a1)
"""
[[3 4 5 6]
[7 8 4 5]
[6 7 8 9]]
"""
print(a.shape) # (2, 6) 修改数组形状会指向新的对象,不会修改原数组本身 # 把数据转换成一维数组
a2 = a.flatten()
print(a2) # [3 4 5 6 7 8 4 5 6 7 8 9] # 数组的计算/广播机制,在运算过程中加减乘除的值被广播到所有元素上
b = a*10
print(b) # [[30 40 50 60 70 80][40 50 60 70 80 90]] c = np.arange(20)
print(c) # [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
c1 = c.reshape(4, 5)
print(c1)
"""
[[0 1 2 3 4]
[5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
"""
d = np.array([1, 1, 1, 1, 1])
d1 = d.reshape(1, 5)
print(d1) # [[1 1 1 1 1]] (1, 5) print(c1 - d1)
"""
所有元素全部 -1,即所有行全部减d1这个1行5列的数组
[[-1 0 1 2 3]
[4 5 6 7 8]
[9 10 11 12 13]
[14 15 16 17 18]]
""" # 广播的原则:如果两个数组的后缘维度(trailing dimension,即从末尾开始算起的维度)的轴长度相符,或其中的一方的长度为1,则认为它们是广播兼容的。广播会在缺失和(或)长度为1的维度上进行。

第三节

读取CSV文件

import numpy as np

us_file_path = "./youtube_video_data/US_video_data_numbers.csv"

# 将文件对象通过numpy.loadtxt方法 实例化
t2 = np.loadtxt(us_file_path, delimiter=",", dtype="int")
print(t2)
print(t2.shape) # (1688, 4)

索引

# 取行
print(t2[2]) # 取索引为2的行,即第三行
""" [5845909 576597 39774 170708] """ # 取连续的多行
print(t2[2:]) # 取索引为2开始的所有行
"""[[5845909 576597 39774 170708]
[2642103 24975 4542 12829]
[1168130 96666 568 6666]
...
[ 142463 4231 148 279]
[2162240 41032 1384 4737]
[ 515000 34727 195 4722]]
""" # 取不连续的多行
print(t2[[2, 3, 4]]) # 取索引为2,3,4的行
""""
[[5845909 576597 39774 170708]
[2642103 24975 4542 12829]
[1168130 96666 568 6666]]
"""
# t2[2] = t2[2,] = t2[2, :] 效果是一样的,都是取索引为2的行 # 取列
print(t2[:, 0]) # 取索引为0的所有元素,即第一列
""" [4394029 7860119 5845909 ... 142463 2162240 515000] """ # 取连续多列
print(t2[:, 2:]) # 取索引为2的列开始往后所有的列
""" [[ 5931 46245]
[ 26679 0]
[ 39774 170708]
...
[ 148 279]
[ 1384 4737]
[ 195 4722]] """ # 取不连续的多行
print(t2[:, [2, 3]]) # 取索引为2,3的列
""" [[ 5931 46245]
[ 26679 0]
[ 39774 170708]
...
[ 148 279]
[ 1384 4737]
[ 195 4722]] """ # 取行和列交叉的值
print(t2[2, 3]) # 取第二行和第三列交叉的值
""" 170708 """ # 取多个不相邻的点
# 取出来的结果是(0,0) (2,1) (2,3)(行,列)
print(t2[[0, 2, 2], [0, 1, 3]])
""" [4394029 576597 170708] """

完整代码

import numpy as np

us_file_path = "./youtube_video_data/US_video_data_numbers.csv"

# 将文件对象通过numpy.loadtxt方法 实例化
t2 = np.loadtxt(us_file_path, delimiter=",", dtype="int")
print(t2)
print(t2.shape) # (1688, 4) # 取行
print(t2[2]) # 取索引为2的行,即第三行
""" [5845909 576597 39774 170708] """ # 取连续的多行
print(t2[2:]) # 取索引为2开始的所有行
"""[[5845909 576597 39774 170708]
[2642103 24975 4542 12829]
[1168130 96666 568 6666]
...
[ 142463 4231 148 279]
[2162240 41032 1384 4737]
[ 515000 34727 195 4722]]
""" # 取不连续的多行
print(t2[[2, 3, 4]]) # 取索引为2,3,4的行
""""
[[5845909 576597 39774 170708]
[2642103 24975 4542 12829]
[1168130 96666 568 6666]]
"""
# t2[2] = t2[2,] = t2[2, :] 效果是一样的,都是取索引为2的行 # 取列
print(t2[:, 0]) # 取索引为0的所有元素,即第一列
""" [4394029 7860119 5845909 ... 142463 2162240 515000] """ # 取连续多列
print(t2[:, 2:]) # 取索引为2的列开始往后所有的列
""" [[ 5931 46245]
[ 26679 0]
[ 39774 170708]
...
[ 148 279]
[ 1384 4737]
[ 195 4722]] """ # 取不连续的多行
print(t2[:, [2, 3]]) # 取索引为2,3的列
""" [[ 5931 46245]
[ 26679 0]
[ 39774 170708]
...
[ 148 279]
[ 1384 4737]
[ 195 4722]] """ # 取行和列交叉的值
print(t2[2, 3]) # 取第二行和第三列交叉的值
""" 170708 """ # 取多个不相邻的点
# 取出来的结果是(0,0) (2,1) (2,3)(行,列)
print(t2[[0, 2, 2], [0, 1, 3]])
""" [4394029 576597 170708] """

第四节

将数组中的nan更换为对应列的均值

import numpy as np

t = np.arange(24)
t1 = t.reshape(4, 6).astype("float")
t1[1, 2:] = np.nan print(t1)
print("*"*100)
for i in range(t1.shape[1]):
temp_col = t1[:, i]
# nan == nan -> Ture
# np.count_nonzero(temp_col != temp_col)返回的是对布尔类型的统计True=1,False=0、
nan_num = np.count_nonzero(temp_col != temp_col)
# print(temp_col != temp_col)
"""
[False False False False] 0
[False False False False] 0
[False False False False] 0
[True False False False] 1
[True False False False] 1
[True False False False] 1
"""
if nan_num != 0: # 不为零则说明这一列里面有nan
# 将有nan的列中的不为nan的元素赋值给temp_not_nan_col
temp_not_nan_col = temp_col[temp_col == temp_col]
# 选中当前为nan的位置,把值赋值为不为nan的均值
temp_col[np.isnan(temp_col)] = temp_not_nan_col.mean() print(t1) """
result
[[ 0. 1. 2. 3. 4. 5.]
[ 6. 7. nan nan nan nan]
[12. 13. 14. 15. 16. 17.]
[18. 19. 20. 21. 22. 23.]]
****************************************************************************************************
[[ 0. 1. 2. 3. 4. 5.]
[ 6. 7. 12. 13. 14. 15.]
[12. 13. 14. 15. 16. 17.]
[18. 19. 20. 21. 22. 23.]] """

第五节

numpy与matplotlib结合

美国YTB视频评论的直方图

import numpy as np
from matplotlib import pyplot as plt us_file_path = "./youtube_video_data/US_video_data_numbers.csv" t_us = np.loadtxt(us_file_path, delimiter=",", dtype=int) # 取评论的数据
t_us_comments = t_us[:, -1] # 选择比5000小的数据
t_us_comments = t_us_comments[t_us_comments <= 1511] # 组距
d = 50 # 组数 = (max-min)//组距
bin_nums = (t_us_comments.max() - t_us_comments.min()) // 5
print(bin_nums) # 绘图
plt.figure(figsize=(20, 8), dpi=80) plt.hist(t_us_comments, bin_nums)
plt.grid(alpha=0.4)
plt.show()

英国YTB视频评论和喜欢的散点图

import numpy as np
from matplotlib import pyplot as plt uk_file_path = "./youtube_video_data/GB_video_data_numbers.csv" t_uk = np.loadtxt(uk_file_path, delimiter=",", dtype=int) # 选择喜欢的书比50万小的数据
t_uk = t_uk[t_uk[:, 1] <= 500000]
# 错误写法t_uk = t_uk[: , 1] <= 500000 这种写法反馈的是bool类型 # 分别取出喜欢的列,和评论的列
t_uk_comment = t_uk[:, -1]
t_uk_like = t_uk[:, 1] # 绘图展示
plt.figure(figsize=(20, 8), dpi=80) plt.scatter(t_uk_like, t_uk_comment) plt.show()

Numpy基本使用方法的更多相关文章

  1. numpy的使用方法

    一.numpy快速入门 1.什么是numpy: numpy是python的一个矩阵类型,提供了大量矩阵处理的函数,非正式来说,就是一个使运算更容易,执行更迅速的库,因为它的内部运算是通过c语言而不是p ...

  2. numpy.ndarray类型方法

    numpy.ndarray 类numpy.ndarray(shape,dtype = float,buffer = None,offset = 0,strides = None,order = Non ...

  3. numpy.random.seed()方法

    先贴参考链接: https://stackoverflow.com/questions/21494489/what-does-numpy-random-seed0-do numpy.random.se ...

  4. Windows系统中python3.7安装数据可视化模块Matplotlib、numpy的各种方法汇总

    安装环境:Windows10 64位Python3.7 32位 确保已经安装PIP工具命令窗口输入PIP出现以下窗口说明PIP已经成功安装 方法1:(1)在Matplotlib的官网下载电脑对应的版本 ...

  5. Pytorch中的variable, tensor与numpy相互转化的方法

    1.将numpy矩阵转换为Tensor张量 sub_ts = torch.from_numpy(sub_img) #sub_img为numpy类型 2.将Tensor张量转化为numpy矩阵 sub_ ...

  6. numpy的random方法和常用数据类型

    NumPy 的常用数据类型 np.random 随机数模块

  7. 05.其他创建numpy数组的方法

    >>> import numpy as np >>> np.zeros(10,dtype=int) array([0, 0, 0, 0, 0, 0, 0, 0, 0 ...

  8. Numpy求均值、中位数、众数的方法

    首先需要数据源,这里随便写了一个: nums = [1,2,3,4] 求均值和中位数均可以使用numpy库的方法: import numpy as np #均值 np.mean(nums) #中位数 ...

  9. Numpy的介绍与基本使用方法

    1.什么是Numpy numpy官方文档:https://docs.scipy.org/doc/numpy/reference/?v=20190307135750 NumPy是一个功能强大的Pytho ...

  10. Python3.1-标准库之Numpy

    这系列用来介绍Python的标准库的支持Numpy部分.资料来自http://wiki.scipy.org/Tentative_NumPy_Tutorial,页面有许多链接,这里是直接翻译,所以会无法 ...

随机推荐

  1. 深入理解java线程池 一

    本文为博主原创,未经允许不得转载: 在多线程和高并发场景中,需要创建大量的线程来进行业务处理,我们通常创建线程有两种方法,一种是通过继承Thread类,另一种是实现Runnable的接口,但是我们创建 ...

  2. 【解决方案】如何使用 Http API 代替 OpenFeign 进行远程服务调用

    目录 前言 一.何为OpenFeign 1.1@FeignClient注解 1.2注意事项 二.常见的Http API 2.1Apache 2.2Okhttp 2.3Hutool 三.RestTemp ...

  3. AMBA总线介绍-02

    AMBA总线介绍 1 HSIZE AHB总线的地址位宽和数据位宽一般都是32bit,一个字节8bit,一个字节占用一个地址空间,但当一个32bit的数据写入一个存储器中或者从一个存储器中读取,32bi ...

  4. Redis-主从复制-哨兵模式

  5. [转帖]性能调优:理解Set Statistics IO输出

    https://www.cnblogs.com/woodytu/p/4535658.html 性能调优是DBA的重要工作之一.很多人会带着各种性能上的问题来问我们.我们需要通过SQL Server知识 ...

  6. linux 内存盘的使用方式与验证

    linux 内存盘的使用方式与验证 背景 某些情况下, 硬盘的写入是一个很大的瓶颈 使用 内存文件系统的方式应该能够极大的提高IO的速度. 内存盘的优点是比较快, 缺点就是数据不是持久化的. 其实还是 ...

  7. MySQL批量执行SQL修改视图属主的办法

    前人挖坑 后人填坑 Study From https://blog.csdn.net/carefree2005/article/details/109812943 第一步: 形成SQL select ...

  8. 学习下Redis内存模型

    作者:京东零售 吴佳 前言 redis,对于一个java开发工程师来讲,其实算不得什么复杂新奇的技术,但可能也很少人去深入了解学习它的底层的一些东西.下面将通过对内存统计.内存划分.存储细节.对象类型 ...

  9. error: Your local changes to the following files would be overwritten by merge

    拉取代码出现 error: Your local changes to the following files would be overwritten by merge 解决方案 你团队其他成员修改 ...

  10. ElementUI实现表格(table) 行上下移动的效果

    参考地址 https://blog.csdn.net/sunshine0508/article/details/88390155 看大佬的地址 <div id="app"&g ...