Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Numpy 笔记-基础篇

Numpy 笔记-基础篇

作者头像
Ewdager
发布于 2020-07-14 03:50:51
发布于 2020-07-14 03:50:51
44000
代码可运行
举报
文章被收录于专栏:Gvoidy备份小站Gvoidy备份小站
运行总次数:0
代码可运行

创建 ndarray

常用方法

array函数可接受一切序列类型对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [2]: data1 = [6.1, 5, 4, 3, 1]

In [3]: arr1 = np.array(data1)

In [4]: arr1
Out[4]: array([6.1, 5, 4, 3, 1])

In [5]: data2 = [[1, 2, 3, 4], [5, 6, 7, 8]]

In [6]: arr2 = np.array(data2)

In [7]: arr2
Out[7]:
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

In [8]: arr2.shape
Out[8]: (2, 4)

In [9]: arr2.dtype
Out[9]: dtype('int32')

除非显式说明,np.array会尝试为新建的这个数组判断一个较为合适的数据类型。数据类型保存在特殊的dtype对象中。比如上面的两个例子中。我们有:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [19]: arr1.dtype
Out[19]: dtype('float64')

In [20]: arr2.dtype
Out[20]: dtype('int32')

其他新建数组方法

函数

说明

asarray

将输入转换为ndarray,如果输入本身就是一个ndarray就不进行复制

arange

np.arange(5) → array([0, 1, 2, 3, 4])

ones

np.ones((2,2)) → array([[1., 1.], [1., 1.]])

ones_like

np.ones_like([1,2,3]) → array([1, 1, 1])

zeros

np.zeros((2,2)) → array([[0., 0.], [0., 0.]])

zeros_like

np.ones_like([1,2,3]) → array([0, 0, 0])

empty、empty_like

np.empty(1) → array([5.06106712e+58])

eys、identity

np.eye(2) → array([[1., 0.], [0., 1.]])

X 根据指定的形状和dtype创建一个为X的数组, X_like以另一个数组为参数,并根据其形状和dtype创建一个为X的数组

ndarray 的数据类型

调用astype会创建一个新的数组,而不是对原数组进行修改

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 显式说明类型
In [39]: arr1 = np.array([1, 2, 3], dtype=np.float64)

In [40]: arr1
Out[40]: array([1., 2., 3.])

In [41]: arr1.dtype
Out[41]: dtype('float64')

# 修改类型
In [42]: int_arr1 = arr1.astype(np.int64)

In [43]: int_arr1
Out[43]: array([1, 2, 3], dtype=int64)

In [44]: int_arr1.dtype
Out[44]: dtype('int64')

# 另一种修改类型方法
In [45]: int_arr = np.arange(10)

In [47]: float_arr = np.array([.1, .3, .5,.6], dtype=np.float64)

In [48]: int_arr.astype(float_arr.dtype)
Out[48]: array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])

数组和标量之间的运算

FBI WARNING!离!散!数!学!警!告!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [49]: arr = np.array([[1., 2., 3.], [4., 5., 6.]])

In [50]: arr
Out[50]:
array([[1., 2., 3.],
       [4., 5., 6.]])

In [51]: arr * arr
Out[51]:
array([[ 1.,  4.,  9.],
       [16., 25., 36.]])

In [52]: arr - arr
Out[52]:
array([[0., 0., 0.],
       [0., 0., 0.]])

In [53]: arr + arr
Out[53]:
array([[ 2.,  4.,  6.],
       [ 8., 10., 12.]])

In [54]: arr / arr
Out[54]:
array([[1., 1., 1.],
       [1., 1., 1.]])

In [55]: 1 / arr
Out[55]:
array([[1.        , 0.5       , 0.33333333],
       [0.25      , 0.2       , 0.16666667]])

In [57]: arr ** 0.5
Out[57]:
array([[1.        , 1.41421356, 1.73205081],
       [2.        , 2.23606798, 2.44948974]])

基本的索引和切片

切片的注意事项

NumPy中将一个标量赋值给切片,会自动修改整个选取!并且将切片赋值给一个变量,修改变量原数组也会改变!如想得到一个副本,需要copy或者deepcopy

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 切片与修改切片
In [58]: arr = np.arange(10)

In [59]: arr[5]
Out[59]: 5

In [60]: arr[5:8]
Out[60]: array([5, 6, 7])

In [61]: arr[5:8] = 12

In [62]: arr
Out[62]: array([ 0,  1,  2,  3,  4, 12, 12, 12,  8,  9])

# 赋值变量后修改切片
In [63]: arr_sli = arr[5:8]

In [64]: arr_sli[1] = 1234

In [65]: arr
Out[65]: array([   0,    1,    2,    3,    4,   12, 1234,   12,    8,    9])

In [66]: arr_sli[:] = 64

In [67]: arr
Out[67]: array([ 0,  1,  2,  3,  4, 64, 64, 64,  8,  9])

由于 Numpy 是的设计目的是处理大数据,所以坚持将数据复制出来会产生极大的性能和内存问题。

高维数组索引

类似Python基本库中的多维列表索引,但Numpy中多维数组可以使用以逗号隔开的索引列表来选取单个元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [89]: arr2d
Out[89]:
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

In [90]: arr2d[1][1]
Out[90]: 5

# 等价
In [91]: arr2d[1,1]
Out[91]: 5

切片索引

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 第一项切行,第二项切列

In [92]: arr2d
Out[92]:
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

In [93]: arr2d[:2, 1:]
Out[93]:
array([[2, 3],
       [5, 6]])

布尔索引

布尔型数组的长度必须跟被索引的轴长度一致,并且可以和切片、整数混合使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [95]: names
Out[95]: array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'], dtype='<U4')


In [96]: names == 'Bob'
Out[96]: array([ True, False, False,  True, False, False, False])

In [98]: from numpy.random import randn

In [99]: data = randn(7, 4)

In [100]: data
Out[100]:
array([[ 1.0414046 ,  0.27541176, -0.28867275,  0.43976932],
       [ 1.41040224,  0.85299112, -1.25119339, -0.22021196],
       [ 0.6567735 , -1.68611377,  1.21111831,  0.30837087],
       [-1.71472061,  1.83107771, -0.4621784 , -0.44085432],
       [ 1.62355481,  1.05545767,  1.03071674, -0.58314536],
       [ 1.42174078,  0.37195811,  0.33015409, -1.5331736 ],
       [ 0.30902783, -0.65909982, -0.74522413, -0.40299012]])

In [101]: data[names == 'Bob']
Out[101]:
array([[ 1.0414046 ,  0.27541176, -0.28867275,  0.43976932],
       [-1.71472061,  1.83107771, -0.4621784 , -0.44085432]])

# 混合使用

In [102]: data[names=='Bob', 2:]
Out[102]:
array([[-0.28867275,  0.43976932],
       [-0.4621784 , -0.44085432]])

# 否定用法

In [103]: names != 'Bob'
Out[103]: array([False,  True,  True, False,  True,  True,  True])

In [105]: data[~(names=='Bob')]
Out[105]:
array([[ 1.41040224,  0.85299112, -1.25119339, -0.22021196],
       [ 0.6567735 , -1.68611377,  1.21111831,  0.30837087],
       [ 1.62355481,  1.05545767,  1.03071674, -0.58314536],
       [ 1.42174078,  0.37195811,  0.33015409, -1.5331736 ],
       [ 0.30902783, -0.65909982, -0.74522413, -0.40299012]])

# 布尔条件 & | (不可使用 and or)

In [107]: mask = (names == 'Bob') | (names == 'Will')

In [108]: mask
Out[108]: array([ True, False,  True,  True,  True, False, False])

# 布尔索引使用示例

In [110]: data[data<0]=0

In [111]: data
Out[111]:
array([[1.0414046 , 0.27541176, 0.        , 0.43976932],
       [1.41040224, 0.85299112, 0.        , 0.        ],
       [0.6567735 , 0.        , 1.21111831, 0.30837087],
       [0.        , 1.83107771, 0.        , 0.        ],
       [1.62355481, 1.05545767, 1.03071674, 0.        ],
       [1.42174078, 0.37195811, 0.33015409, 0.        ],
       [0.30902783, 0.        , 0.        , 0.        ]])

花式索引

花式索引和切片不同,他总是将数据复制进新数组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [114]: arr
Out[114]:
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, 30, 31]])

# 取1,5,7,2行区域(形成新数组)
In [115]: arr[[1,5,7,2]]
Out[115]:
array([[ 4,  5,  6,  7],
       [20, 21, 22, 23],
       [28, 29, 30, 31],
       [ 8,  9, 10, 11]])

# (1, 0), (5, 3), (7, 1), (2, 2)位置的元素区域
In [116]: arr[[1,5,7,2], [0,3,1,2]]
Out[116]: array([ 4, 23, 29, 10])

# 取1,5,7,2行区域,列按[0,3,1,2]顺序排列
In [117]: arr[[1,5,7,2]][:, [0,3,1,2]]
Out[117]:
array([[ 4,  7,  5,  6],
       [20, 23, 21, 22],
       [28, 31, 29, 30],
       [ 8, 11,  9, 10]])

# 花式索引是生成新数组

In [122]: arr2 = arr[[1,5,7,2]]

In [123]: arr2
Out[123]:
array([[ 4,  5,  6,  7],
       [20, 21, 22, 23],
       [28, 29, 30, 31],
       [ 8,  9, 10, 11]])

In [124]: arr2 = 1

In [125]: arr
Out[125]:
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, 30, 31]])

数组转置和轴对换

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [127]: arr
Out[127]:
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

In [128]: arr.T
Out[128]:
array([[ 0,  5, 10],
       [ 1,  6, 11],
       [ 2,  7, 12],
       [ 3,  8, 13],
       [ 4,  9, 14]])


# 看不懂。。
In [130]: arr
Out[130]:
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])

In [132]: arr.transpose((1,0,2))
Out[132]:
array([[[ 0,  1,  2,  3],
        [ 8,  9, 10, 11]],

       [[ 4,  5,  6,  7],
        [12, 13, 14, 15]]])

通用函数:快速的元素级数组函数

通用函数是一种能对ndarray中的数据执行元素级运算的函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [133]: arr = np.arange(10)

# 平方根
In [134]: np.sqrt(arr)
Out[134]:
array([0.        , 1.        , 1.41421356, 1.73205081, 2.        ,
       2.23606798, 2.44948974, 2.64575131, 2.82842712, 3.        ])

# e为底的指数
In [135]: np.exp(arr)
Out[135]:
array([1.00000000e+00, 2.71828183e+00, 7.38905610e+00, 2.00855369e+01,
       5.45981500e+01, 1.48413159e+02, 4.03428793e+02, 1.09663316e+03,
       2.98095799e+03, 8.10308393e+03])

# 元素级最大值
In [136]: x = randn(8)

In [137]: y = randn(8)

In [139]: x
Out[139]:
array([ 0.29123626,  2.54672169, -1.0185621 ,  0.46756089, -1.72738298,
        0.73119483, -0.55088788, -0.14345012])

In [140]: y
Out[140]:
array([ 1.53812286,  0.28810153, -0.65714547, -1.07375593,  1.31292609,
        0.5431188 , -0.18918957,  0.30398994])

In [138]: np.maximum(x, y)
Out[138]:
array([ 1.53812286,  2.54672169, -0.65714547,  0.46756089,  1.31292609,
        0.73119483, -0.18918957,  0.30398994])

一元ufunc

函数

说明

abs、fabs

计算整数、浮点数或复数的绝对值。对于非复数值,可以使用fabs更快

sqrt

平方根

square

平方

exp

以e为底的指数

log、log10、log2、log1p

自然对数、10为底、2为底、log(1+x)

sign

计算各元素正负号1(正数)0(零)-1(负数)

ceil

向上取整

floor

向下取整

rint

四舍五入,保留dtype

modf

将小数和整数部分以两个独立数组的形式返回

isnan

返回是NaN值的布尔数组

isfinite、isinf

返回是有穷数(非inf、非NaN)、无穷数的布尔数组

cos、cosh、sin、sinh、tan、tanh

普通、双曲型三角函数

arccos、arccosh、arcsin、arcsinh、arctan、arctanh、

反三角函数

logical_not

各元素not x的真值。相当于-arr

二元ufunc

函数

说明

add

对应元素相加

subtract

从第一个数组中减去第二个数组中的元素

multiply

数组相乘

divide、floor_divide

除法、向下圆整除法(丢弃余数)

power

A数组的B次方

maximum、fmax

最大值、fmax忽略NaN

minimum、fmin

最小值、fmin忽略NaN

mod

取模

copysign

将B数组值的符号复制给第一个数组

greater、greater_equal、less、less_equal、equal、not_equal

比较运算,生成布尔数组,>、>=、<、<=、==、!=

logical_and、logical_or、logical_xor

元素级真值逻辑运算,相当于&、| 、^

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Numpy基础知识点汇总
1、概述 Numpy是高性能科学计算和数据分析的基础包,它的部分功能如下: 1)ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。 2)对整组数据进行快速运算的标准数学函数 3)用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 2、ndarray的创建 这一节,我们主要关注ndarray数组的创建,我们主要有以下几种方式: 数组转换 创建数组的最简单的方法就是使用array函数,将Python下的list转换为ndarray。 #通过数组创建一个ndarray data1
石晓文
2018/04/11
1.6K0
numpy小结
主要是对《利用python进行数据分析》第二版这本书中关于numpy的部分进行了复习,将相关的代码进行练习。 import numpy as np my_arr = np.arange(1000000) my_list = list(range(1000000)) %time for _ in range(10): my_arr2 = my_arr * 2 CPU times: user 21.2 ms, sys: 11.2 ms, total: 32.4 ms Wall time: 32.6 ms
皮大大
2021/03/02
4040
NumPy之:ndarray多维数组操作
NumPy一个非常重要的作用就是可以进行多维数组的操作,多维数组对象也叫做ndarray。我们可以在ndarray的基础上进行一系列复杂的数学运算。
程序那些事
2021/05/19
1K0
《利用Python进行数据分析·第2版》第4章 NumPy基础:数组和矢量计算4.1 NumPy的ndarray:一种多维数组对象4.2 通用函数:快速的元素级数组函数4.3 利用数组进行数据处理4.
NumPy(Numerical Python的简称)是Python数值计算最重要的基础包。大多数提供科学计算的包都是用NumPy的数组作为构建基础。 NumPy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++、Fortran等语言编写的代码的A C API。 由于NumPy提供了一个
SeanCheney
2018/04/24
5K0
《利用Python进行数据分析·第2版》第4章 NumPy基础:数组和矢量计算4.1 NumPy的ndarray:一种多维数组对象4.2 通用函数:快速的元素级数组函数4.3 利用数组进行数据处理4.
Python 数据处理:NumPy库
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的博客 🍊个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 🥭本文内容:Python 数据处理:NumPy库 ---- Python 数据处理:NumPy库 1.NumPy简介 2.NumPy的ndarray:一种多维数组对象 2.1 创建ndarray 2.2 ndarray的数据类型 2.3 NumPy数组的运算 2.4 基本的索引和切片 2.5 切片索引 2.6 布尔型索引 2
小嗷犬
2022/11/15
5.8K0
Python 数据处理:NumPy库
NumPy知识速记
由于NumPy提供了一个简单易用的C API,因此很容易将数据传递给由低级语言编写的外部库,外部库也能以NumPy数组的形式将数据返回给Python。这个功能使Python成为一种包装C/C++/Fortran历史代码库的选择,并使被包装库拥有一个动态的、易用的接口。
timerring
2023/05/07
1.1K0
NumPy知识速记
【数据分析从入门到“入坑“系列】利用Python学习数据分析-Numpy中的索引
NumPy数组的索引是一个内容丰富的主题,因为选取数据子集或单个元素的方式有很多。一维数组很简单。从表面上看,它们跟Python列表的功能差不多:
天道Vax的时间宝藏
2021/08/11
1.6K0
AI基础:Numpy简易入门
NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA 用其处理一些本来使用 C++,Fortran 或 Matlab 等所做的任务。
统计学家
2019/12/05
7180
盘一盘 Python 系列 2 - NumPy (上)
Numpy 是 Python 专门处理高维数组 (high dimensional array) 的计算的包,每次使用它遇到问题都会它的官网 (www.numpy.org). 去找答案。 在使用 numpy 之前,需要引进它,语法如下:
用户5753894
2019/07/05
2.4K0
盘一盘 Python 系列 2 - NumPy (上)
numpy科学计算包的使用1
Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。其实,list已经提供了类似于矩阵的表示形式,不过numpy为我们提供了更多的函数。
听城
2018/04/27
1.3K0
numpy科学计算包的使用1
【Python数据分析】NumPy基础,看这一篇就够了!
NumPy是Python的一种开源的数值计算扩展库,包含很多功能,如创建n维数组(矩阵)、对数组进行函数计算、数学计算等等。
Skrrapper
2025/05/09
1450
【Python数据分析】NumPy基础,看这一篇就够了!
python的numpy入门简介
arr=np.array(data)    #将列表转为numpy.ndarray  np.array([2,4])
用户7886150
2021/01/07
1.5K0
NumPy入个门吧
NumPy 的全称叫 Numerical Python ,它是 Python 科学计算最重要的基础包之一。很多提供科学计算的包都是基于 NumPy 之上建立的,著名的 pandas 也是。
德育处主任
2024/02/24
1540
科学计算工具Numpy1.ndarray的创建与数据类型2.ndarray的矩阵运算ndarray的索引与切片3.ndarray的元素处理元素判断函数元素去重排序函数4.2016年美国总统大选民意调查
Numpy:提供了一个在Python中做科学计算的基础库,重在数值计算,主要用于多维数组(矩阵)处理的库。用来存储和处理大型矩阵,比Python自身的嵌套列表结构要高效的多。本身是由C语言开发,是个很基础的扩展,Python其余的科学计算扩展大部分都是以此为基础。
Python攻城狮
2018/08/23
3.5K0
Python 数据分析(PYDA)第三版(二)
NumPy,即 Numerical Python,是 Python 中最重要的数值计算基础包之一。许多提供科学功能的计算包使用 NumPy 的数组对象作为数据交换的标准接口之一。我涵盖的关于 NumPy 的许多知识也适用于 pandas。
ApacheCN_飞龙
2024/05/24
4560
Python 数据分析(PYDA)第三版(二)
Python:numpy模块最详细的教程
一、numpy简介 numpy官方文档:https://docs.scipy.org/doc/numpy/reference/?v=20190307135750 numpy是Python的一种开源的数
Python学习者
2023/01/04
1.3K0
《利用Python进行数据分析·第2版》 附录A NumPy高级应用A.1 ndarray对象的内部机理A.2 高级数组操作A.3 广播A.4 ufunc高级应用A.5 结构化和记录式数组A.6 更多
在这篇附录中,我会深入NumPy库的数组计算。这会包括ndarray更内部的细节,和更高级的数组操作和算法。 这章包括了一些杂乱的章节,不需要仔细研究。 A.1 ndarray对象的内部机理 NumPy的ndarray提供了一种将同质数据块(可以是连续或跨越)解释为多维数组对象的方式。正如你之前所看到的那样,数据类型(dtype)决定了数据的解释方式,比如浮点数、整数、布尔值等。 ndarray如此强大的部分原因是所有数组对象都是数据块的一个跨度视图(strided view)。你可能想知道数组视图arr[
SeanCheney
2018/04/24
4.9K0
《利用Python进行数据分析·第2版》 附录A NumPy高级应用A.1 ndarray对象的内部机理A.2 高级数组操作A.3 广播A.4 ufunc高级应用A.5 结构化和记录式数组A.6 更多
科学计算工具Numpy
Numpy:提供了一个在Python中做科学计算的基础库,重在数值计算,主要用于多维数组(矩阵)处理的库。用来存储和处理大型矩阵,比Python自身的嵌套列表结构要高效的多。本身是由C语言开发,是个很基础的扩展,Python其余的科学计算扩展大部分都是以此为基础。
周小董
2019/03/25
3.2K0
科学计算工具Numpy
Numpy与矩阵
请注意,本文编写于 980 天前,最后修改于 980 天前,其中某些信息可能已经过时。
曼亚灿
2023/05/17
1.4K0
Numpy与矩阵
清晰易懂的Numpy入门教程
Numpy是python语言中最基础和最强大的科学计算和数据处理的工具包,如数据分析工具pandas也是基于numpy构建的,机器学习包scikit-learn也大量使用了numpy方法。本文介绍了Numpy的n维数组在数据处理和分析的所有核心应用。
Python数据科学
2019/08/28
1.6K0
推荐阅读
相关推荐
Numpy基础知识点汇总
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验