Python-Numpy语法总结-数组的创建

NumPy 是什么?

NumPy是使用Python进行科学计算的基础软件包。除其他外,它包括:

功能强大的N维数组对象。
精密广播功能函数。
集成 C/C+和Fortran 代码的工具。
强大的线性代数、傅立叶变换和随机数功能。

#全部行都能输出
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

利器之一:Ndarray

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。ndarray 对象是用于存放同类型元素的多维数组。ndarray 中的每个元素在内存中都有相同存储大小的区域。

数组(ndarray)的创建

import numpy as np

一维数组的创建

np.array

#生成数组的时候还可以指定数组基本元素类型。
a=np.array([1,2,3,4])

np.arange函数

np.arange(10)
np.arange(0,10,0.2)

np.linspace

help(np.linspace)
np.linspace(0,3,3)
#这个函数里面有一个参数endpoint,是一个布尔值,
#可以通过对这个参数的设定,来选择是否包含最后一个数值。
np.linspace(1,8,5,endpoint=False)
array([1. , 2.4, 3.8, 5.2, 6.6])

二维数组的创建

import numpy as np
b=np.array([[1,2,3],[4,5,6]])
c=np.array([[1,"2",3],[4,"5",6]])
d=np.array([[1,"2",3],["4",5,6]])
e=np.array([[1,"2",3],["4",5,6]],dtype="object")
print("b=",b)
print("c=",c)
print("d=",d)
print("e=",e)
b= [[1 2 3]
 [4 5 6]]
c= [['1' '2' '3']
 ['4' '5' '6']]
d= [['1' '2' '3']
 ['4' '5' '6']]
e= [[1 '2' 3]
 ['4' 5 6]]

创建数组时候的注意事项:

a.输入的数组要工整,否则会出现后续一系列处理问题。 a=np.array([1,2,3,[4,5]]) b=np.array([[1,2,3],[4,5]]) 不要创建这样的数组,虽然创建的过程不会提示出错。如果创建的对象不工整,建议选择创建列表对象。
b.输入数组里面的元素最好是同一类型,如果不是同一类型,最好指dtype=“object”,否则如果既不是同一类型,又没有指定数组类型为object,那么生成数组之后可能被强制转化为字符串。比如下面的例子。

a=np.array([1,2,3.0])
a.dtype
dtype('float64')
b=np.array([1,2,3,"11"])
b #元素会转化为字符串类型
b.dtype
dtype('<U11')
c=np.array([[1,2,3],["a","b","c"]])
c #元素会转化为字符串类型
array([['1', '2', '3'],
       ['a', 'b', 'c']], dtype='<U11')
#运行下面这句会有错误提示。
d=np.array([1,2,3,"a"],dtype="float")
#下面这一句运行正确,无错误提示。
d=np.array([1,2,3,"a"],dtype="object")
d
array([1, 2, 3, 'a'], dtype=object)
ValueError                                Traceback (most recent call last)
<ipython-input-225-7d6178ef8f85> in <module>
      1 #运行下面这句会有错误提示。
----> 2 d=np.array([1,2,3,"a"],dtype="float")

ValueError: could not convert string to float: 'a'
#如何查看numpy定义了哪些dtype?
np.typeDict
{'?': numpy.bool_,
 0: numpy.bool_,
 'byte': numpy.int8,
 'b': numpy.int8,
 1: numpy.int8,
 'ubyte': numpy.uint8,
 'B': numpy.uint8,

…… ……

数组的属性

a=np.array([[1,2,3],[4,5,6]])
b=np.array([1,2,3])
a
array([[1, 2, 3],
       [4, 5, 6]])

ndim属性

#ndim属性
a.ndim #返回2
2
b.ndim #返回1
1

shape属性

a.shape #返回(2,3)
b.shape #返回(3,),这是一个只包含一个元素的元组。
(2, 3)
(3,)

size属性

a.size
6

dtype属性

a.dtype
dtype('int32')

itemsize属性
itemsize : int | The memory use of each array element in bytes.

a=np.array([1,2,3])
a.itemsize
4
b=np.array(["刘","1","2"])
b.itemsize
4
#如果想查看数组实例的其他属性可以运行下面的代码
help(a)

缺失值问题

python中的缺失值有np.nan,None等,后面的章节会详细说明。

#np.nan是一个float类型的值
type(np.nan)
float
#定义一个含有缺失值的一维数组,数组类型为float。
a=np.array([1,2,np.nan])
a.dtype
dtype('float64')
#定义一个含有缺失值的字符串数组。
#下面的命令可能并不是你想要的,这会把缺失值转换成"nan"
a=np.array(["1","2",np.nan])
a
array(['1', '2', 'nan'], dtype='<U3')
#下面讲两个正确的定义方法
#方法1
#a的类型为object
a=np.array(["1","2",None])
print(a[2])
None
#方法2
a=np.array(["1","2",np.nan],dtype="object")
a
array(['1', '2', nan], dtype=object)

np.isnan函数

a=np.array([1,2,3,np.nan])
np.isnan(a)
array([False, False, False,  True])
#np.isnan("a")
#np.isnan(None)
#运行上面两句会有错误提示,因为这个函数的参数不能是字符串,或者是字符串组成的数组。
np.isnan(1) #里面的参数可以是一个数值,或者数值组成的数组。返回False
False

一些特殊数组的快速创建

元素全部为0的数组

np.zeros((2,3)) #参数是数组的形状
array([[0., 0., 0.],
       [0., 0., 0.]])

元素全部为1的数组

np.ones((3,3))
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])

用指定的元素将数组填满

np.full((2,3),"a")
array([['a', 'a', 'a'],
       ['a', 'a', 'a']], dtype='<U1')
np.full((2,3),[1,2,3])
array([[1, 2, 3],
       [1, 2, 3]])
np.full((2,3),[1,2]) #注意运行这句会有错误提示,因为不能将指定的内容(第二个参数),广播到我们指定形状的数组(2*3)

生成单位矩阵

np.eye() #生成一个单位矩阵,因为单位矩阵是一个方阵, 所以只指定一个行数或者列数就可以,不用指定多个数。

np.eye(3)
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

生成一个未初始化的(任意的)指定形状的数组

#生成一个未初始化的(任意的)指定形状的数组
np.empty((3,4))
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])

生成一个对角线矩阵

#生成一个对角线矩阵
np.diag([1,2,3,4])
array([[1, 0, 0, 0],
       [0, 2, 0, 0],
       [0, 0, 3, 0],
       [0, 0, 0, 4]])

np.random模块:随机数组的生成

np.random模块下的部分函数说明

函数描述
seed 向随机数生成器传递随机种子
rand 从均匀分布中抽取样本 ,取值范围为0到1
uniform 从均匀分布中抽取样本
randint 根据给定的范围抽取随机整数
randn 从均值为0方差为1的正态分布中抽取样本
normal 从正态分布中抽取样本
| choice |从一个一维数组中随机抽取一个样本

np.random.randint(10,20,(3,4))
array([[17, 17, 10, 12],
       [19, 19, 13, 12],
       [15, 18, 11, 10]])
np.random.choice(np.array(["张三","李四","王五"]),5)
#可以设定样本量和各个值被抽中的概率
array(['王五', '王五', '李四', '李四', '张三'], dtype='<U2')
#打乱数组元素顺序
a=np.array([1,2,3,4])
np.random.shuffle(a) #不会返回对象,会直接作用于数组a
a
array([4, 2, 1, 3])

累积求和

# 累积求和
import numpy as np
a=np.random.randint(1,10,5)
print("a=",a)
print("a.cumsum=",a.cumsum())
a= [4 6 1 4 7]
a.cumsum= [ 4 10 11 15 22]
b=np.random.randint(1,10,(5,2))
print("b=",b)
print("b.cumsum(axis=0)=",b.cumsum(axis=0))
b= [[1 5]
 [5 6]
 [8 7]
 [7 3]
 [5 3]]
b.cumsum(axis=0)= [[ 1  5]
 [ 6 11]
 [14 18]
 [21 21]
 [26 24]]
print("b.cumsum(axis=1)=",b.cumsum(axis=1))
b.cumsum(axis=1)= [[ 1  6]
 [ 5 11]
 [ 8 15]
 [ 7 10]
 [ 5  8]]

猜你喜欢

转载自blog.csdn.net/gracejpw/article/details/103221332
今日推荐