python-numpy的详细使用


numpy的安装

  • pip工具
    • pip install numpy
  • 安装anaconda

1、创建N维数组

1.1 np.array()

  括号里面输入的是一个序列,可以是列表、元组、字符串等等,可以指定元素类型dtype。但是每一个元素的类型一定是相同的,因为它是一个多维同类数据容器

1.1.1 使用np.array()创建数组

In [2]: import numpy as np

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

In [6]: np.array('1,2,3')
Out[6]: array('1,2,3', dtype='<U5')

注意
如果行列不对称,那么生成的数组就变成了几个列表,并且只是一维的、数据类型是obj。

In [13]: arr=np.array([[1,2,3],[4,5]])

In [14]: arr
Out[14]: array([list([1, 2, 3]), list([4, 5])], dtype=object)

1.1.2 自定义dtype

上面都是没有指定数组的数据类型,根据元素的类型,自动设置dtype。也可以自己设置,例如:

#创建0-5的数组arr1,并指定其数据类型为"bool"
In [7]: arr1=np.array(range(6),dtype='bool')
In [8]: arr1
Out[8]: array([False,  True,  True,  True,  True,  True])

数据类型在下面介绍。

1.2 np.asarray()

这个方法和上面的比较像,但是还是有一些差别。

#前者是把一个序列的值传入变成一个数组,是一种浅复制,有点类似list.copy。改变数组对象的内容,不会改变原来的序列。
list=[1,2,3,4]
ar1=np.array(list)
ar1[1]=0
print('数组1:      ',ar1)
print('原来的列表:',list)
#而后者的话:
#(1)如果传入的不是一个数组,那么它的功能和前者是一样的。
ar2=np.array(list)
ar2[1]=0
print('数组2:   ',ar2)
print('原来的列表',list)
#(2)如果传入的是一个数组,那它就是深复制了,复制的是地址,相当于指针指向了原来的数据,改变它会改变原对象。
ar=np.array([1,2,3,4])
ar3=np.asarray(ar)
ar3[1]=0
print('数组3变化:         ',ar3)
print('原来的数组也发生变化',ar)
'''
output:
数组1:       [1 0 3 4]
原来的列表: [1, 2, 3, 4]
数组2:    [1 0 3 4]
原来的列表 [1, 2, 3, 4]
数组3变化:          [1 0 3 4]
原来的数组也发生变化 [1 0 3 4]
'''

1.3 np.arange()

和python内置库中的range类似,不过这里直接生成的是一个数组。

In [9]: np.arange(10,step=2)
Out[9]: array([0, 2, 4, 6, 8])

1.4 np.zeros

根据给定形状生成全0矩阵。

In [69]: np.zeros((2,3,4))
Out[69]:
array([[[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]],

       [[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]]])

这里括号内传入的形状必须加括号,因为又很多参数,不加括号不能被识别

1.5 array.ones()、array.empty()

和array.zeros()类似,不再赘述。

1.6 array.full()

不再是全1、全0、全空,可以自定义一个值。

In [73]: np.full((3,4),8)
Out[73]:
array([[8, 8, 8, 8],
       [8, 8, 8, 8],
       [8, 8, 8, 8]])

1.7 array.ones_like()

  和array.ones()比较相似,但是传入的参数不是形状,而是一个数组。

#前者是创建一个全1的数组,输入的参数是shape
ones=np.ones((3,3))
print('ones:\n',ones)
#后者是创建一个和已知数组shape一样的一个全1数组,输入的参数是一个数组
ones_like=np.ones_like([[1,2],[2,3],[5,6]])#这里输入的是一个(3,2)的数组
print('ones_like:\n',ones_like)
'''
output:
ones:
 [[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
ones_like:
 [[1 1]
 [1 1]
 [1 1]]
'''

2、数组的数据类型

2.1 numpy中的数据类型(dtype)

类型 类型代码 描述
int8,uint8 i1,u1 有符号和无符号的8数位整数
int16,uint16 i2,u2 有符号和无符号的16数位整数
int32,uint32 i4,u4 有符号和无符号的32数位整数
int64,uint64 i8,u8 有符号和无符号的64数位整数
float16 f2 半精度浮点数
float32 f4 标准单精度浮点数
float64 f8 标准双精度浮点数
bool ? 布尔值,存储True或False
string_ S ASCII字符串类型,eg:‘S10’
unicode_ U Unicode类型,eg:‘U10’

2.2 查看数组的数据类型

使用array.dtype属性来查看。

In [11]: arr=np.array('abcdefgh')

In [12]: arr.dtype
Out[12]: dtype('<U8')

2.3 修改数组的数据类型

使用array.astype(dtype)来修改。

In [15]: arr1=np.array([[1,2,3],[4,5,6]]
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值