NumPy基础入门(1)基础内容

学习汇总:点这里

前言

NumPy是使用Python进行科学计算的基本软件包。它包含以下内容:

  1. 强大的N维数组对象
  2. 复杂的(广播)功能
  3. 集成C / C ++和Fortran代码的工具
  4. 有用的线性代数,傅立叶变换和随机数功能

除了其明显的科学用途外,NumPy还可以用作通用数据的高效多维容器。可以定义任意数据类型。这使NumPy可以无缝,快速地与各种数据库集成。

如果有疑问的可以直接找官网地址

1.NumPy的主要对象

NumPy的主要对象是齐次多维数组。它是所有相同类型的元素(通常为数字)表,由非负整数元组索引。在NumPy中,尺寸称为轴。NumPy的数组类称为ndarray。请注意,numpy.array这与标准Python库类不同array.array,后者仅处理一维数组且功能较少。ndarray对象的重要属性是:

  1. ndarray.ndim #数组的轴数(尺寸)。
  2. ndarray.shape #数组的尺寸。这是一个整数元组,指示每个维中数组的大小。对于具有n行和m列的矩阵,shape将为(n,m)。shape因此,元组的长度 是轴数ndim。
  3. ndarray.size #数组元素的总数。这等于的元素的乘积shape。
  4. ndarray.dtype #一个对象,描述数组中元素的类型。可以使用标准Python类型创建或指定dtype。另外,NumPy提供了自己的类型。
  5. ndarray.itemsize #数组中每个元素的大小(以字节为单位)。
  6. ndarray.data #包含数组实际元素的缓冲区。通常,我们不需要使用此属性,因为我们将使用索引工具访问数组中的元素。
>>> import numpy as np
>>> a = np.arange(15).reshape(3, 5)
>>> a  #输出数组
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
>>> a.shape  #输出数组尺寸
(3, 5)
>>> a.ndim  #输出数组轴数
2
>>> a.dtype.name  #输出数组元素类型
'int64'
>>> a.itemsize  #输出数组元素大小(字节)
8
>>> a.size  #输出数组元素个数
15

2.创建数组

基本创建数组方式如下:

>>> a = np.array(1,2,3,4)    # WRONG
>>> a = np.array([1,2,3,4])  # RIGHT
>>> import numpy as np
>>> a = np.array([2,3,4])  #创建一维数组
>>> a
array([2, 3, 4])
>>> a.dtype
dtype('int64')
>>> b = np.array([1.2, 3.5, 5.1])
>>> b.dtype
dtype('float64')
>>> b = np.array([(1.5,2,3), (4,5,6)])  #创建二维数组
>>> b
array([[ 1.5,  2. ,  3. ],
       [ 4. ,  5. ,  6. ]])
>>> c = np.array( [ [1,2], [3,4] ], dtype=complex )  #创建指定状态的数组
>>> c
array([[ 1.+0.j,  2.+0.j],
       [ 3.+0.j,  4.+0.j]])

注意:函数zeros创建一个全零的数组,该函数ones创建全零 的数组,该函数empty 创建其初始内容是随机的并取决于内存状态的数组。默认情况下,创建的数组的dtype为 float64。而函数arange类似于Python内置函数的功能range。函数linspace将范围(a,b)切割成元素数量为c的数组。

import numpy as np
>>> np.zeros( (3,4) )  #创建全零的数组
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
>>> np.ones( (2,3,4), dtype=np.int16 )  #创建全一数组
array([[[ 1, 1, 1, 1],
        [ 1, 1, 1, 1],
        [ 1, 1, 1, 1]],
       [[ 1, 1, 1, 1],
        [ 1, 1, 1, 1],
        [ 1, 1, 1, 1]]], dtype=int16)
>>> np.empty( (2,3) )  #创建其初始内容是随机的并取决于内存状态的数组
array([[  3.73603959e-262,   6.02658058e-154,   6.55490914e-260],
       [  5.30498948e-313,   3.14673309e-307,   1.00000000e+000]])

>>> np.arange( 10, 30, 5 )  #类似arrange的Python内置函数range
array([10, 15, 20, 25])
>>> np.arange( 0, 2, 0.3 )  #获得从0-2范围的9个元素的数组
array([ 0. ,  0.3,  0.6,  0.9,  1.2,  1.5,  1.8])

如果数组太大而无法打印,则NumPy会自动跳过数组的中心部分,仅打印角点。要禁用此行为并强制NumPy打印整个数组,可以使用更改打印选项set_printoptions。

np.set_printoptions(threshold=sys.maxsize) 

3.数组基本操作

数组上的算术运算符适用于elementwise。创建一个新数组,并用结果填充。

基础运算

>>> a = np.array( [20,30,40,50] )
>>> b = np.arange( 4 )
>>> b
array([0, 1, 2, 3])
>>> c = a-b
>>> c
array([20, 29, 38, 47])
>>> b**2
array([0, 1, 4, 9])
>>> 10*np.sin(a)
array([ 9.12945251, -9.88031624,  7.4511316 , -2.62374854])
>>> a<35
array([ True, True, False, False])

矩阵运算

>>> A = np.array( [[1,1],
...                [0,1]] )
>>> B = np.array( [[2,0],
...                [3,4]] )
>>> A * B
array([[2, 0],
       [0, 4]])
>>> A @ B
array([[5, 4],
       [3, 4]])
>>> A.dot(B) 
array([[5, 4],
       [3, 4]])

>>> a = np.ones((2,3), dtype=int)
>>> b = np.random.random((2,3))
>>> a *= 3
>>> a
array([[3, 3, 3],
       [3, 3, 3]])
>>> b += a
>>> b
array([[ 3.417022  ,  3.72032449,  3.00011437],
       [ 3.30233257,  3.14675589,  3.09233859]])
>>> a += b                  # b is not automatically converted to integer type
Traceback (most recent call last):
  ...
TypeError: Cannot cast ufunc add output from dtype('float64') to dtype('int64') with casting rule 'same_kind'

矩阵行列运算

>>> a = np.random.random((2,3))
>>> a
array([[ 0.18626021,  0.34556073,  0.39676747],
       [ 0.53881673,  0.41919451,  0.6852195 ]])
>>> a.sum()
2.5718191614547998
>>> a.min()
0.1862602113776709
>>> a.max()
0.6852195003967595
>>> b = np.arange(12).reshape(3,4)
>>> b
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>>
>>> b.sum(axis=0)  # 输出每一列元素和
array([12, 15, 18, 21])
>>>
>>> b.min(axis=1)  # 输出每一行最小元素
array([0, 4, 8])
>>>
>>> b.cumsum(axis=1)   # 输出按水平方向每一列的递进式数组
array([[ 0,  1,  3,  6],
       [ 4,  9, 15, 22],
       [ 8, 17, 27, 38]])

注意:NumPy提供了熟悉的数学函数,例如sin,cos和exp。在NumPy中,这些被称为“通用函数”(ufunc)。在NumPy中,这些函数在数组上逐元素操作,从而生成数组作为输出。

4.索引,切片及循环

一维数组可以被索引,切片和遍历,就像 列表 和其他Python序列一样。而多维数组每个轴可以有一个索引。这些索引以元组给出,并用逗号分隔:

>>> a = np.arange(10)**3
>>> a
array([  0,   1,   8,  27,  64, 125, 216, 343, 512, 729])
>>> a[2]
8
>>> a[2:5]  #输出下标为2-5范围的数组
array([ 8, 27, 64])
>>> a[:6:2] = -1000  # 下标0-6范围的数组间隔赋值为-1000
>>> a
array([-1000,     1, -1000,    27, -1000,   125,   216,   343,   512,   729])
>>> a[ : :-1]  # 翻转数组
array([  729,   512,   343,   216,   125, -1000,    27, -1000,     1, -1000])
import numpy as np
def f(x,y):
    return 10*x+y
b = np.fromfunction(f,(5,4),dtype = int)
print (b)
print (b[2,3])
print (b[0:5, 1])  # each row in the second column of b
print (b[ : ,1])  # equivalent to the previous example
print (b[1:3, : ])  # each column in the second and third row of b
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值