numpy

自学整理记录,大神见笑

为什么学习numpy

  • 快速
  • 方便
  • 科学计算的基础库

什么是numpy

  • 一个在Python中做科学计算的基础库,重在数值计算,也是大部分Python科学计算库的基础库,多用于在大型、多维数组上执行数值运算
  • 导包

import numpy as np

numpy基础操作

  • 创建数组,生成ndarray

t1 = numpy.arange(3)
t2 = numpy.arange(3, 7)
t3 = numpy.arange(3, 7, 2)
t4 = numpy.arange(0, 1, 0.1)
t5 = numpy.arange(3.0)
print(t1)
print(t2)
print(t3)
print(t4)
print(t5)
输出:array([0, 1, 2])
array([3, 4, 5, 6])
array([3, 5])
array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])
array([ 0., 1., 2.])

  • 注:array([0, 1, 2])这种格式就是ndarray

  • 注:np.arange(10)是numpy特有方法,等于np.array(range(10))

  • 查看ndarray中的元素数据类型

t1 = numpy.arange(3)
t1.dtype

  • numpy有特有数据类型
numpy数据类型.jpg
  • 指定ndarray中的元素数据类型

np.arange(4,dtype="float32")

  • 调整ndarray中元素的数据类型

t1 = np.arange(4,dtype="float32")
t2 = t1.astype("bool")

  • 限制小数位数

t1 = np.array([random.random() for i in range(10)])
np.round(t1, 2)

  • 注:round第二个参数就表示保留几位小数

数组的形状

  • 查看数组的形状

a = numpy.array([1, 2, 3])
b = numpy.array([[1, 2, 3],[4, 5, 6]])
print(a.shape)
print(b.shape)
输出:(3,)
(2,3)

  • 修改数组的形状

t1 = numpy.arange(12)
print(t1.reshape((3, 4)))
输出:([[0,1,2,3], [4,5,6,7], [8,9,10,11]])

  • 注:reshape有返回值,不会改变原来t1的形状

  • 注:变成一维数组传(24,),24为所有元素的个数

  • 将其他形状数组展开成一维数组

t1 = numpy.arange(12).reshape((3, 4)
t1.flatten()

  • 将数组转置

t1 = np.arange(12).reshape(3,4)
t1.transpose()
t1.T
t1.swapaxes(1,0)

  • 注:转置就是将数组按对角线为中心交换数据

  • 注:转置有上面三种方法

  • 计算

t1 = numpy.arange(12).reshape((3, 4)
print(t1 + 2)
print(t1 - 2)
print(t1 * 2)
print(t1 / 2)

  • 注:t1中每个值都会去计算加减乘除
  • 注:t1 / 0,如果t1元素的值是0,则返回nan;如果不是0,则返回inf

t1 = numpy.arange(12).reshape((3, 4)
t2 = numpy.arange(100,112).reshape((3, 4)
print(t1 + t2)
print(t1 - t2)
print(t1 * t2)
print(t1 / t2)

  • 注:对应位置的元素做计算
  • 注:维度不同的数组进行计算,符合广播原则就可以计算;没有对应就会报错ValueError: operands could not be broadcast together with shapes
  • 注:广播原则:如果两个数组的后缘维度的轴长度相等或其中一方的长度为1,即认为广播兼容,可以计算

  • 在numpy中使用0,1,2...数字表示,一维数组只有一个0轴;二维数组(shape(0,0))有0轴和1轴;三维数组(shape(0,0,0))有0轴和1轴和2轴
二维数组轴.jpg
三维数组轴.jpg

numpy读取数据

  • numpy实际中不会用读取数据库数据功能,因为pandas中有更强大的方法是,了解即可

  • csv文件,逗号分隔文件,csv文件里所有的数据都是用逗号隔开的

  • 读取

np.loadtxt(frame,dtype="float",delimiter=None,skiprows=0,usecols=None,unpack=False)

参数 解释
frame 路径
dtype 元素数据类型,默认会把较大的数据转化为科学计数的方式
delimiter 以什么分隔,不指定会报错
skiprows 跳过前x行,一般跳过第一行表头
usecols 读取指定的列,索引,元组类型
unpack 默认False,如果是True则转置

numpy索引和切片

  • 取单行

t1[2]

  • 取连续多行

t1[2:]

  • 取不连续多行

t1[[2,8,10]]

  • 取单列

t1[:,0]

  • 取连续多列

t1[:,2:]

  • 取不连续多列

t1[:,[2,6,8]]

  • 同时取单行和单列

t1[2,3]

  • 同时取多行和多列

t1[2:5,1:4]

  • 注:冒号:左闭右开

  • 取多个不相邻的点

t1[[0,2,3],[0,1,3]]

  • 注:取的是坐标(0,0)(2,1)(3,3)三个点

  • 修改numpy中的数值

t1[:,2:4] = 0

  • 注:取到对应的行、列、点赋值即可

  • 修改筛选出来的条件的值

t1[t1 < 10] = 10

  • 注:上面表示所有小于10的点修改为10

  • numpy中三元运算符

np.where(t < 10, 0, 10)

  • 注:表示所有小于10的数替换为0,大于等于10的数替换为10

  • numpy中的clip(裁剪)

t.clip(10, 18)

  • 注:表示把小于10的都替换为10,大于18的都替换为18

  • 把值替换为nan

t1.astype(float)
t2[3,3] = np.nan

  • 注:如果直接执行第二句代码,可能会报错ValueError:cannot convert float NaN to integer,表示不能将int类型的nan赋值给float,nan是float类型

数组的拼接

  • 竖直拼接

t1 = array([[0,1,2],[3,4,5]])
t2 = array([[6,7,8],[9,10,11]])
np.vstack((t1, t2))
结果是array([[0,1,2],[3,4,5],[6,7,8],[9,10,11]])

  • 水平拼接

t1 = array([[0,1,2],[3,4,5]])
t2 = array([[6,7,8],[9,10,11]])
np.hstack((t1, t2))
结果是array([[0,1,2,6,7,8],[3,4,5,9,10,11]])

数组的行列交换

  • 行交换

t1[[1,2],:] = t1[[2,1],:]

  • 列交换

t1[:,[1,2]] = t1[:,[2,1]]

numpy更多方法

  • 创建一个全0的数组

np.zeros((3, 4))

  • 创建一个全1的数组

np.ones((3, 4))

  • 创建一个对角线为1的数组

np.eye(10)

  • 注:10参数为10行10列

  • 获取最大值,最小值的位置

np.argmax(t, axis=0)
np.argmin(t, axis=0)

  • 注:axis=0,表示列;axis=1,表示行

numpy生成随机数

参数 解释
np.random.rand(d0,d1,...dn) 创建d0到dn维度均匀分布的随机数数组
np.random.randn(d0,d1,...dn) 创建d0到dn维度正态分布的随机数数组
np.random.randint(low,high,(shape)) 生成随机整数,low到high是范围,size是形状
np.random.uniform(low,high,(size)) 生成随机小数,low到high是范围,size是形状
np.random.seed(s) 只在第一次生成随机数,后续再生成和第一次一样

numpy的注意点copy和view

  • a = b,a = b[:],复制,会相互影响
  • a = b.copy(),复制,a和b互不影响

numpy中的nan和inf

  • nan:not a number表示不是一个数字,nan是浮点类型

  • nan出现情况
    1.0除0
    2.数据缺失
    3.无穷大减去无穷大,无穷大加上无穷大

  • inf:infinity,inf表示正无穷,-inf表示负无穷,inf是浮点类型

  • inf出现情况
    1.一个非0数字除0

  • 注意点:
    1.np.nan == np.nan False
    2.np.nan != np.nan True
    3.np.count_nonzero(t != t) 判断ndarray中nan个数
    4.np.isnan(t) 判断ndarray中哪些地方是nan,可以替换为0
    5.nan和任何值计算都是nan
    6.把nan替换为0不合适,会降低平均值等,合适的操作时替换为均值

  • nan替换为均值示例代码

import numpy as np

t1 =np.arange(12).reshape((3,4)).astype("float")
t1[1, 2:4] = np.nan
print(t1)
for i in range(t1.shape[1]):
 temp_col = t1[:, i]
 nan_num = np.count_nonzero(temp_col != temp_col)
 if nan_num != 0:
  # 获取该列所有值不是nan的array
  temp_not_nan_col = temp_col[temp_col == temp_col]
  # 将temp_not_nan_col的均值赋值给temp_col中值为nan的位置
  temp_col[np.isnan(temp_col)] = temp_not_nan_col.mean()


print(t1)

numpy中常用统计函数

函数 含义
np.sum(t,axis=None) 求和
np.mean(t,axis=None) 均值
np.median(t,axis=None) 中值
np.max(t,axis=None) 最大值
np.min(t,axis=None) 最小值
np.ptp(t,axis=None) 最大值和最小值的差
np.std(t,axis=None) 标准差
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容