栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

学习Numpy(一)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

学习Numpy(一)

目录
  • 理论知识
    • Numpy介绍
      • 1 Numpy比python数组好在哪
      • 2 NumPy 大多数需要快速计算的部分都是用 C 或 C ++ 编写的。
      • 3 NumPy 的源代码位于这个 github 资料库中:https://github.com/numpy/numpy
    • Numpy引入
    • Numpy和Python Array(数组)之间重要区别
  • 代码操作
    • 1.创建ndarry对象

理论知识 Numpy介绍

NumPy 数值 Python(Numerical Python)是用于处理数组的 python 库。 由 Travis Oliphant 于 2005 年创建。

1 Numpy比python数组好在哪

在 Python 中,我们有满足数组功能的列表,但是处理起来很慢。NumPy 旨在提供一个比传统 Python 列表快 50 倍的数组对象。NumPy 中的数组对象称为 ndarray,它提供了许多支持函数,使得利用 ndarray 非常容易。

NumPy 比列表更快的主要原因:

**储存方式:**NumPy 数组存储在内存中的一个连续位置,因此进程可以非常有效地访问和操纵它们。这种行为在计算机科学中称为引用的局部性。它还经过了优化,可与最新的 CPU 体系结构一同使用。
矢量化:矢量化描述了代码中没有任何显示的循环,索引等。这当然是预编译的C代码幕后优化的结果。
广播:描述操作的隐式逐元素行为的术语。一般来说,在Numpy中,所有操作,不仅仅是算术运算,而是逻辑,位,功能等,都以这种隐式的逐元素方式表现,即它们进行广播。

2 NumPy 大多数需要快速计算的部分都是用 C 或 C ++ 编写的。 3 NumPy 的源代码位于这个 github 资料库中:https://github.com/numpy/numpy Numpy引入

NumPy 通常以 np 别名导入。

import numpy as np

查看版本

print(np.__version__)

**Numpy提供多维数组对象,**各种派生对象(如掩码数组和矩阵),以及用于各种数组快速操作的API,包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅里叶变换、基本线性代数、基本统计运算和随机模拟等。

Numpy包的核心是ndarray对象。它封装了python原生的同数据类型的n维数组。
ndarray 即n-dimension-array 的简写。
创建一个 ndarray 只需调用 NumPy 的 array 函数即可(后面会再说):

import numpy as np
a = np.array([[0,1,2],[3,4,5],[6,7,8]])
print(a)
type(a)

为了保证其性能优良,其中有许多操作都是代码在本地进行编译的。

Numpy和Python Array(数组)之间重要区别

1.Numpy数组在创建时具有固定的大小,与Python的原生数组对象(可以动态增长:使用pop(),insert(),append(),remove(),clear()函数操作)不同。更改ndarry的大小将创建一个新数组并删除原来的数组。

2.Numpy在数组中的元素都需要具有相同的数据类型,因此在内存中大小相同。 例外:Python的原生数组里包含了Numpy对象的时候,这种情况下就允许不同大小元素的数组。

3.Numpy数组有助于对大量数据进行高级数学和其他类型的计算。通常,这些操作的执行效率更高,比使用Python原生数组的代码更少。

4.越来越多的基于Python的科学和数学软件使用Numpy数组,虽然这些工具通常都支持Python的原生数组作为参数,但它们在处理之前还是会将输入的数组转换为Numpy的数组,而且也通常输出Numpy数组。

代码操作 1.创建ndarry对象
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

实例:
array()函数,括号内可以是列表、元组、数组、迭代器,生成器等
1.1对于object

#列表
np.array([1,2,3,4,5])
type(np.array([1,2,3,4,5]))

输出:

numpy.ndarray
#元组
np.array((1,2,3,4,5))

输出:

array([1, 2, 3, 4, 5])
#迭代对象
np.array(range(10))

输出:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.array([i**2 for i in range(10)])

输出:

array([ 0,  1,  4,  9, 16, 25, 36, 49, 64, 81])
#创建10以内的偶数的数组
np.array([i for i in range(10) if i%2 == 0])

输出:

array([0, 2, 4, 6, 8])

1.2 对于dtype
#列表中元素类型不相同

np.array([1,1.5,3,4.5,'5'])

结果全部改成字符串类型
输出:

array(['1', '1.5', '3', '4.5', '5'], dtype=' 

输入为整型

ar1 = np.array(range(10))
ar1

输出:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

输入为浮点型

ar2 = np.array([1,2,3.14,4,5])
ar2

输出:

array([1.  , 2.  , 3.14, 4.  , 5.  ])

输入为二维数组:嵌套序列(列表,元组均可)

ar3 = np.array([[1,2,3],('a','b','c')])
ar3

输出:

array([['1', '2', '3'],
       ['a', 'b', 'c']], dtype=' 

二维数组的维数不同

ar4 = np.array([[1,2,3],('a','b','c','d')])
ar4

输出:

array([list([1, 2, 3]), ('a', 'b', 'c', 'd')], dtype=object)

会有提醒:

C:Users14036AppDataLocalTemp/ipykernel_19096/189647353.py:1: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.
  ar4 = np.array([[1,2,3],('a','b','c','d')])
ar4.shape

输出:两行一列,强制转化为1维

(2,)

设置数组元素类型

has_dtype_a = np.array([1,2,3,4,5],dtype='float')
has_dtype_a

输出:

array([1., 2., 3., 4., 5.])

1.3.对于copy
设置copy参数,默认为Ture

a = np.array([1,2,3,4,5])
b = np.array(a)
print('a:', id(a), ' b:',id(b))
print('以上可以看出a和b的内存地址')

输出:

a: 1894294250768  b: 1894294252208
以上可以看出a和b的内存地址

不使用ndarray,将a的值赋给b相当于列表的引用赋值

a = np.array([1,2,3,4,5])
b = a  #相当于列表的引用赋值
print('a:', id(a), ' b:',id(b))
print('以上可以看出a和b的内存地址')
a: 1894294252592  b: 1894294252592
以上可以看出a和b的内存地址

1.4.对于ndmin
ndmin指定数组的维度

a = np.array([1,2,3])
print(a)
a = np.array([1,2,3],ndmin=2)
print(a)

输出:
a由一维数组变为2维数组

[1 2 3] 
[[1, 2, 3]]

1.5.对于subok
subok参数,类型为bool值,默认为False.
若为True,使用object的内部数据类型;若为False:使用数组的数据类型
例子:

a = np.mat([1,2,3,4]) #创建一个矩阵
print(type(a))
#既要复制一份副本,又要保持原类型
at = np.array(a,subok=True)
af = np.array(a)

print('at,subok为True:',type(at))
print('af,subok为False:',type(af))
print(id(at),id(af))

输出:


at,subok为True: 
af,subok为False: 
1894294309568 1894294252688

1.6.对于order
order参数指定阵列的内存布局。当对象不是数组时, 除非指定” F”, 否则新创建的数组将以C顺序(行头或行主)出现。当指定F时, 它将按Fortran顺序(列标题或列主)。当对象是数组时, 它保持以下顺序。
默认为“K”
可以参考:
深入理解numpy库中的order参数

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/976911.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号