学习Numpy(二)

一. 复习创建ndarray对象:

  numpy.array(object, dtype = None, 
  copy = True, order = None,
   subok = False, ndmin = 0)

在这里插入图片描述

二、学习新知识

1.使用arange()生成区间数组:

1.1 arange()

numpy.arange(start,stop,step,dtype)

np.arange(10)
输出:

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

默认是从0开始的。

np.arange(3.1)
输出:

array([0., 1., 2., 3.])

加上类型:

x = np.arange(5, dtype = float)
print(x)

输出:

[0. 1. 2. 3. 4.]

加上步长:

np.arange(10,20,2)

输出:

array([10, 12, 14, 16, 18])

起始是0,终止是20,步长3:

ar2 = np.arange(20,step = 3)##等价于ar2=np.arange(0,20,3)
print(ar2)

输出:

[ 0  3  6  9 12 15 18]

如何防止float不精确影响numpy.arange

1.2 linspace()创建等差数列

np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None) ##默认步长50

a = np.linspace(1,10,10)

a

输出:

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

使用等差数列,实现输出0 0.5 1 1.5 2 2.5 3 3.5 4

A = np.linspace(0, 4, 9)
A

输出:

array([0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. ])

endpoint的作用:默认为True,包含终止值。若设置为False,不包含终止值。

ar1 = np.linspace(2.0, 3.0, num=5, endpoint=False) #不包含终止值
ar1

输出:

array([2. , 2.2, 2.4, 2.6, 2.8])

retstep:默认为False,设置retstep显示计算后的步长

ar1 = np.linspace(2.0, 3.0, num=5, retstep=True)  #得到一个元组
ar1

输出:

(array([2.  , 2.25, 2.5 , 2.75, 3.  ]), 0.25)

想得到一个长度为10的,从0.1开始的、间隔为0.1的数组:

np.linspace(0.1,1,10)

输出:

array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])

1.3 logspace创建等比数列

np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)

如:a = np.logspace(0, 9, 10, base=2)#base是基数
输出:

array([  1.,   2.,   4.,   8.,  16.,  32.,  64., 128., 256., 512.])

np.logspace(A,B,C,base=D)
A:生成数组的起始值为D的A次方
B:生成数组的结束值为D的B次方
C:共生成C个数
D:指数型数组的底数为D,当省略base=D时,默认底数为10

取得1到2之间10个常用数:

np.logspace(1.0, 2.0, num=10)

输出:

array([ 10.        ,  12.91549665,  16.68100537,  21.5443469 ,
        27.82559402,  35.93813664,  46.41588834,  59.94842503,
        77.42636827, 100.        ])

endpoint和dtype同上

1.4.全0数列

创建指定大小的数组,数组元素以0来填充

numpy.zeros(shape,dtype = float ,order = 'C')

默认为浮点数np.zeros(5)
输出:

array([0., 0., 0., 0., 0.])

设置为整型:np.zeros(5, dtype = 'int')
输出:

array([0, 0, 0, 0, 0])

2行2列的全0数组:np.zeros((2,2))
输出:

array([[0., 0.],
       [0., 0.]])

2块2行3列的数组:

np.zeros((2,2,3))

输出:

array([[[0., 0., 0.],
        [0., 0., 0.]],

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

zeros_like返回具有与给定数组相同的形状和类型的0数组
如:

ar1 = np.array([[1,2,3],[4,5,6]])
np.zeros_like(ar1)

输出:

array([[0, 0, 0],
       [0, 0, 0]])

1.5.全1数列

ar5 = np.ones(9)
ar6 = np.ones((2,3,4))
ar7 = np.ones_like(ar3)
print('ar5:',ar5)
print('ar6:',ar6)
print('ar7:',ar7)

ar3在numpy学习(一)里:ar3 = np.array([[1,2,3],('a','b','c')])#二维数组:嵌套序列(列表,元组均可)

输出:

ar5: [1. 1. 1. 1. 1. 1. 1. 1. 1.]
ar6: [[[1. 1. 1. 1.]
  [1. 1. 1. 1.]
  [1. 1. 1. 1.]]

 [[1. 1. 1. 1.]
  [1. 1. 1. 1.]
  [1. 1. 1. 1.]]]
ar7: [['1' '1' '1']
 ['1' '1' '1']]

2.NumPy 数组属性

在这里插入图片描述

2.1ndarray.ndim

ndarray.ndim 返回数组的维度(秩):是一个标量,一维数组的秩为1,二维数组的秩为2
举例:

a = np.array([1,2,3,4,5,6])
b = a.reshape((2,3))
c = np.array([
    [
        [1,2,3],
        [4,5,6]
    ],
    [
        [11,22,33],
        [44,55,66]
    ]
])
print('a的ndim:', a.ndim)
print('b的ndim:', b.ndim)
print('c的ndim:', c.ndim)

输出:

a的ndim: 1
b的ndim: 2
c的ndim: 3

2.2 ndarray.shape

ndarray.shape 返回一个包含数组维度的元组,比如对于矩阵,返回n行m列的元组。它也可以用于调整数组维度。
比如:

a = np.array([1,2,3,4,5,6])
print('一维数组:',a.shape)

b = np.array([[1,2,3],[4,5,6]])
print('二维数组:', b.shape)

c = np.array([
    [
        [1,2,3],
        [4,5,6]
    ],
    [
        [11,22,33],
        [44,55,66]
    ]
])
print('三维数组:',c.shape)

输出:

一维数组: (6,)
二维数组: (2, 3)
三维数组: (2, 2, 3)

调整数组大小:

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

输出:

[[1 2]
 [3 4]
 [5 6]]

NumPy 也提供了 reshape 函数来调整数组大小:

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

输出:

[[1, 2] 
 [3, 4] 
 [5, 6]]

调整维度reshape 返回调整后的副本,而不改变原ndarray:

a = np.arange(20)
b = a.reshape(4,5)
print("a:",a)
print("b:",b)

输出:

a: [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
b: [[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]]

调整维度resize ,会改变原数组:

a = np.arange(20)
b = a.resize(4,5)
print("a:",a)
print("b:",b)

输出:

a: [[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]]
b: None

numpy.resize(a, new_shape) 如果新数组大于原始数组,则新数组将填充a的重复副本,如

a = np.array([[0,1],[2,3]])
b_2_3 = np.resize(a,(2,3))
b_2_3

输出:

array([[0, 1, 2],
       [3, 0, 1]])

用0填充:

a.resize((3,4),refcheck=False)#或者a.resize(3,4)
a

输出:

array([[0, 1, 2, 3],
       [0, 0, 0, 0],
       [0, 0, 0, 0]])

2.3 ndarray.size

ndarray.size 数组元素的总个数,相当于.shape中的n*m的值

a = np.array([1,2,3,4,5,6])
print('a的size:', a.size)

b = np.array([[1,2,3],[4,5,6]])
print('b的size:',b.size)

输出:

a的size: 6
b的size: 6

2.3 ndarray.dtype

ndarray.dtype ndarray对象的元素类型

a = np.array([1,2,3,4,5,6])
print('a的dtype:', a.dtype)

b = np.array([[1,2,3],[4,5,6]])
print('b的dtype:',b.dtype)

输出:

a的dtype: int32
b的dtype: int32

astype 类型转换 numpy数据类型转换,调用astype返回数据类型修改后的数据,但是源数据的类型不会变:

a = np.array([1.1,1.2])
print('a的数据类型:',a.dtype)
print('astype修改数据类型:',a.astype('float32').dtype)
print('原数据类型未改变' , a.dtype)
#正确操作
a = a.astype('float32')
print('修改类型后再次操作,类型改变:',a.dtype)

输出:

a的数据类型: float64
astype修改数据类型: float32
原数据类型未改变 float64
修改类型后再次操作,类型改变: float32

2.4 ndarray.itemsize

ndarray.itemsize 以字节的形式返回数组中每一个元素的大小

a = np.array([1.1,2.2,3.3])
print('dtype:',a.dtype, 'itemsize:', a.itemsize)
b = np.array([1,2,3,4,5])
print('dtype:',b.dtype, 'itemsize:', b.itemsize)

输出:

dtype: float64 itemsize: 8
dtype: int32 itemsize: 4

2.5 ndarray.flags

ndarray.flags 返回 ndarray 对象的内存信息,包含以下属性:
在这里插入图片描述x = np.array([1,2,3,4,5]) print (x.flags)
输出:

 C_CONTIGUOUS : True
  F_CONTIGUOUS : True
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False

2.6 ndarry.real和ndarry.imag

ndarry.real和ndarry.imag 返回数组的实部和虚部

x = np.sqrt([1+0j, 0+1j])
print("x实部:",x.real.dtype,x.real)
print("x虚部:",x.imag.dtype,x.imag)

输出:

x实部: float64 [1.         0.70710678]
x虚部: float64 [0.         0.70710678]

2.7 ndarray.data

ndarray.data返回数组的缓冲区

x = np.arange(5, dtype = np.int8)
print(x.data)

输出:

<memory at 0x000001CE1D867700>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值