2021-03-09 numpy

numpy

What is numpy?

科学计算的基础库,多用在大型、多维数组上执行数值运算

数组

创建数组

import numpy as np

a1 = np.array([1, 2, 3, 4, 5])
# range:生成一个序列;arrange:生成指定dtype的ndarray
a2 = np.array(range(1, 6))
a3 = np.arange(1, 6)

# 数组类型
print(type(a3))
# 数据类型
print(a3.dtype)

数组的数据类型

在这里插入图片描述

import numpy as np

a1 = np.array([1, 2, 3, 4, 5], dtype=float)
a2 = np.array(range(1, 6), dtype="f4")
a3 = np.arange(1, 6, dtype=float)

a4 = a1.astype('int8')
a5 = a1.astype(np.int8)
a6 = a1.astype('i1')

# 数据类型
print(a1.dtype)  # float64
print(a4.dtype)  # int8
print(a5.dtype)  # int8
print(a6.dtype)  # int8

P.S. astype不改变原数组类型,而是生成对应类型的新数组

import numpy as np
 
n = np.array([-0.746, 4.6, 9.4, 7.447, 10.455, 11.555])
 
around1 = np.around(n)
print(around1)  # [ -1.   5.   9.   7.  10.  12.]
 
around2 = np.around(n, decimals=1)
print(around2)  # [ -0.7   4.6   9.4   7.4  10.5  11.6]
 
around3 = np.around(n, decimals=-1)
print(around3)  # [ -0.   0.  10.  10.  10.  10.]

数组形状

a = np.array([1, 2, 3, 4, 5, 6], dtype=float)
print(a.shape)  # (6,)
b = a.reshape(2, 3)
print(a.shape)  # (6,)
print(b.shape)  # (2,3)

P.S. reshape不改变原数组类型,而是生成对应类型的新数组

b = np.array([[3, 4, 5, 6], [7, 8, 4, 5], [6, 7, 8, 9]])
print(b.reshape(1, 12))  # [[3 4 5 6 7 8 4 5 6 7 8 9]]
print(b.flatten())  # [3 4 5 6 7 8 4 5 6 7 8 9]
print(b)
''' [[3 4 5 6]
 [7 8 4 5]
 [6 7 8 9]]'''

在numpy中,用axis(轴)的概念代表维度
在这里插入图片描述

在这里插入图片描述

数组的计算

  • 数组和数的计算:numpy具有广播机制,加减乘除运算中值会被广播到所有的元素上面

  • 数组和数组的计算:数组位置对应的元素两两进行计算

    P.S. 若数组维度不同:某一维度相同时,同样广播兼容,可在该维度上计算(比如a逐行和c进行运算);若无相同维度则报错

numpy读取数据

csv: comma separated value

np.loadtxt(fname,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)
在这里插入图片描述

numpy基本操作

numpy的转置

numpy索引和切片

  • 切片:和list一致,对于二维,例:
# 取行
print(t2[2])
# 取连续的多行
print(t2[2:])
# 取不连续的多行;注意方括号的使用
print(t2[[2,8,10]])
print(t2[1,:])
print(t2[2:,:])
print(t2[[2,10,3],:])

# 取列
print(t2[:,0])
# 取连续的多列
print(t2[:,2:])
# 取不连续的多列
print(t2[:,[0,2]])

# 取行和列,取第3行,第四列的值
a = t2[2,3]
print(a)
print(type(a)) # 依旧是numpy.int64类型

# 取多行和多列,取第3行到第五行,第2列到第4列的结果
# 取的是行和列交叉点的位置
b = t2[2:5,1:4]
print(b)

# 取多个不相邻的点  此处应该注意
# 选出来的结果是(0,0) (2,1) (2,3)
c = t2[[0,2,2],[0,1,3]]
  • 布尔索引:结果生成由true和false组成的数组,可用于进行数值修改

    例:

numpy数值修改

t[t>10] = 0
np.where(t<10,0,10) # 三元运算符,小于10的赋值为0,否则为10
t.clip(10,18) # 小于10的替换为10,大于18的替换为了18

特殊情况:nan,inf(+/-),均为float类型
在这里插入图片描述

数组的拼接

np.vstack((t1,t2)) # 竖直拼接
np.hstack((t1,t2)) # 水平拼接

数组的行列交换

t[[1,2],:] = t[[2,1],:] # 行交换
t[:,[1,2]] = t[:,[2,1]] # 列交换

Other methods

  • np.zeros
  • np.ones
  • np.eye:对角线为1的正方形数组
  • np.argmax(t,axis=0)
  • np.argmin(t,axis=1)

np.random生成随机数

在这里插入图片描述

numpy中常用统计函数

  • 求和:t.sum(axis=None)
  • 均值:t.mean(a,axis=None) 受离群点的影响较大
  • 中值:np.median(t,axis=None)
  • 最大值:t.max(axis=None)
  • 最小值:t.min(axis=None)
  • 极值:np.ptp(t,axis=None) 即最大值和最小值之差
  • 标准差:t.std(axis=None)

numpy的copy和view

  • a=b 完全不复制,a和b相互影响
  • a = b[:],视图的操作,一种切片,会创建新的对象a,但是a的数据完全由b保管,他们两个的数据变化是一致的,
    a = b.copy(),复制,a和b互不影响
  • a = b.copy(),复制,a和b互不影响

An Example:合并两个国家的数据并加上国家来源

import numpy as np

us_data = "./youtube_video_data/US_video_data_numbers.csv"
uk_data = "./youtube_video_data/GB_video_data_numbers.csv"

us_data = np.loadtxt(us_data, delimiter=',', dtype=int)
uk_data = np.loadtxt(uk_data, delimiter=',', dtype=int)

zeros_data = np.zeros(us_data.shape[0], 1).astype(int)
ones_data = np.ones(us_data.shape[0], 1).astype(int)

us_data = np.hstack((us_data, zeros_data))
uk_data = np.hstack((uk_data, ones_data))

final_data = np.vstack(us_data, uk_data)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值