Numpy_02_ndarry对象

17 篇文章 2 订阅

主要内容:

1、创建ndarray

2、ndarry的基本属性

3、 索引与切片

一、ndarry对象

N 维数组对象,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。

1、创建ndarry

1.1、array()

参数说明:

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

常用参数:
    1、object:列表、元组之类的序列对象
    2、dtype:指定数组的数据类型
'''

代码:

import numpy as np

# 列表
list1 = [4,5,6]

# 创建ndarry
t1 = np.array(list1,dtype = "int8")
t1

output:

array([4, 5, 6], dtype=int8)

1.2、asarray()

参数说明:

'''
np.asarray(a, dtype=None, order=None)

常用参数:
    1、object:列表、元组之类的序列对象
    2、dtype:指定数组的数据类型
'''
# 创建ndarry
t2 = np.asarray(t1,dtype = "int8")
t2

output:

array([4, 5, 6], dtype=int8)

提问:
那么array()和asarray有什么区别呢?

当传入的对象是列表时,二者无区别。
当传入的对象时ndarry时,二者有区别:
1、array() 默认拷贝输入的原序列对象,占用新的内存空间
2、asarray() 默认不copy该对象,意味着修改新生成的ndarray数据,会改变原ndarray的数据。

如下:

# 基于ndarray t1创建新的ndarry
t2 = np.asarray(t1,dtype = "int8")
# 修改t2的数据
t2[1] = 10
t1

output:

在这里插入图片描述

1.3、arange()

参数说明:

'''
arange([start,] stop[, step,], dtype=None)

参数解释:
    start:开始数字
    end:结束数字
    step:步长
    dtype:数据类型
注意:
    区间为左闭右开
'''

代码:

# 等同于t3 = np.array(range(1,11,1))
t3 = np.arange(1,11,1,dtype='int8')
t3

output:

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

1.4、linspace() 等差数列

参数说明:

'''
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

参数解释:
    start:开始数字
    stop:结束数字
    num:生成的元素个数
    endpoint:生成的数组是否包含结束数字,默认为True;设置为False,则数组不包括结束数字
    
注意:
    区间默认为为左闭右闭
原理:步长=极差/间隔

      即为步长=(stop -start)/(num -1)
'''

代码:

t4 = np.linspace(5,10,5,endpoint = True)
t4

output:

array([ 5. , 6.25, 7.5 , 8.75, 10. ])

设置endpoint = False看看

t4 = np.linspace(5,10,5,endpoint = False)
t4

output:

array([5., 6., 7., 8., 9.])

1.5、logspace() 等比数列

参数说明:

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

参数解释:
    start:开始数字
    stop:结束数字
    num:生成的元素个数
    base:对数 log 的底数,用于设置等比数列的底数。
    endpoint:生成的数组是否包含结束数字,默认为True;设置为False,则数组不包括结束数字

原理:
1、先生成等差数列:np.linspace(start,end,num,endpoint=True)
2、以base为底数:base ** np.linspace(start,end,num,endpoint=True)
'''

代码:

t5 = np.logspace(1,5,num= 5,base = 2)
t5

output:

array([ 2., 4., 8., 16., 32.])

1.6、zeros(shape) 生成元素全是0的数组
'''
np.zeros(shape)

shape:数组的形状

'''
# 创建一个形状为三行四列的数组
a= np.zeros((3,4))
a

output:

array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
1.7、ones(shape) 生成元素全是1的数组
'''
np.ones(shape)

shape:数组的形状

'''
np.ones((5,3))

output:

array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])
1.8、eyes()创建对角线为1的正方形数组
'''
np.eye(N, M=None, k=0, dtype=<class 'float'>, order='C')

常用参数说明:
N:输出多少行
M:输出多少列,不指定则等于N

'''
np.eye(6)

output:

array([[1., 0., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0., 0.],
       [0., 0., 1., 0., 0., 0.],
       [0., 0., 0., 1., 0., 0.],
       [0., 0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 0., 1.]])
1.9、diag()指定矩阵对角线元素
'''
np.diag(v, k=0)

k:对角线元素
'''
np.diag([3,4,5])

output:

array([[3, 0, 0],
       [0, 4, 0],
       [0, 0, 5]])

2、ndarray的基本属性

2.1、dim 数组维度个数
'''
np.dim 数组维度个数(秩)

NumPy的主要对象是同种类型元素的多维数组。
在NumPy中维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank)。
'''

# 一维数组
a = np.array([1,2,3])
a.ndim

output:

1

# 二维数组
a = np.array([[1,2,3],[4,5,6]])
a.ndim

output:

2

2.2、shape 数组的形状
'''
np.shape 返回数据为元组类型
'''
# 一维数组的形状
a = np.array([1,2,3])
print(a)
a.shape

output:

[1 2 3]
(3,)

# 二维数组的形状
a = np.array([[1,2,3],[4,5,6]])
print(a)
a.shape

output:

[[1 2 3]
 [4 5 6]]
(2, 3)
2.3、size 数组元素的个数
# 二维数组
a = np.array([[1,2,3],[4,5,6]])
print(a)
a.size

output:

[[1 2 3]
 [4 5 6]]
6
2.4、dtype 数组元素的数据类型
print(a)
a.dtype

output:

[[1 2 3]
 [4 5 6]]
dtype('int32')

数组数据类型的修改

ndarray.astype(new_type)

a.astype('int32')
a.astype(np.int64)

ndarray.tostring() 序列化到本地

a.tostring()
2.5、itemsize 每个元素的字节大小
'''
一个元素数据类型为float64的数组itemsiz属性值为8(=64/8)
一个元素数据类型为int32的数组item属性为4(=32/8).
'''
a.itemsize

output:

4

3、索引与切片

3.1、元素索引

'''
元素索引:通过单个整数值来索引元素
'''
# 一维数组
n1 = np.array([2,3,4,5,6,7])
# 取单个元素(取下标为2,即第三个元素)
n1[2]      # 4


# 二维数组
n2 = np.arange(20).reshape(5,4)
n2
# array([[ 0,  1,  2,  3],
#        [ 4,  5,  6,  7],
#        [ 8,  9, 10, 11],
#        [12, 13, 14, 15],
#        [16, 17, 18, 19]])


n2[1,2]
# 6

3.2、 切片索引: 索引连续的数组子集

利用切片进行索引,切片语法与list差不多。

'''
一维数组的切片索引操作同python原生数组操作一样
ndarray[start:end:step]
左闭右开
'''
n1 = np.array([2,3,4,5,6,7])

# 取连续的元素
n1[1:4]    # array([3, 4, 5])

# 取倒数的元素
n1[-4:-2]  # array([24, 5])

'''
二维数组的切片索引操作
ndarrays[start:stop:step,start:stop:step]
左闭右开
'''
n2 = np.arange(20).reshape(5,4)
# array([[ 0,  1,  2,  3],
#        [ 4,  5,  6,  7],
#        [ 8,  9, 10, 11],
#        [12, 13, 14, 15],
#        [16, 17, 18, 19]])

# 取多行数据
n2[1:4:2]
# array([[ 4,  5,  6,  7],
#        [12, 13, 14, 15]])

# 取多列数据
n2[:,-4-2]
# array([[ 0,  1],
#        [ 4,  5],
#        [ 8,  9],
#        [12, 13],
#        [16, 17]])

# 多行多列
n2[1:3,2:4]
# array([[ 6,  7],
#        [10, 11]])

3.3、 花式索引:

花式索引:通过整型数组进行索引

n2
# array([[ 0,  1,  2,  3],
#        [ 4,  5,  6,  7],
#        [ 8,  9, 10, 11],
#        [12, 13, 14, 15],
#        [16, 17, 18, 19]])

# 使用两个整数数组来对axis= 0,1两个轴进行花式索引(按坐标索引数据)
n2[[2,1],[0,1]]  # 坐标(2,0)、(1,1)
# array([8, 5]

# 交换行(交换第三行和第二行顺序)
n2[[2,1]]
# array([[ 8,  9, 10, 11],
#        [ 4,  5,  6,  7]])

# 交换列(交换第三列和第二列顺序)
n2[:,[2,1]]
# array([[ 2,  1],
#        [ 6,  5],
#        [10,  9],
#        [14, 13],
#        [18, 17]])


np.ix_()

'''
np.ix_()
输入选取的行数组与列数组,取交集方形区域的数据
'''

n2[np.ix_([2,3],[0,1,3])]
# array([[ 8,  9, 11],
#        [12, 13, 15]])

'''
等价于np.ix_
该花式索引要掌握~!
'''
n2[[2,3]][:,[0,1,3]]
# array([[ 8,  9, 11],
#        [12, 13, 15]])
3.4、 布尔索引:
'''
布尔索引
通过条件进行逻辑判断,返回True/False,利用布尔值进行索引
'''
n2
# array([[ 0,  1,  2,  3],
#        [ 4,  5,  6,  7],
#        [ 8,  9, 10, 11],
#        [12, 13, 14, 15],
#        [16, 17, 18, 19]])

# 同时满足两个条件即为真,否则假
(n2>4) & (n2<18)
# array([[False, False, False, False],
#        [False,  True,  True,  True],
#        [ True,  True,  True,  True],
#        [ True,  True,  True,  True],
#        [ True,  True, False, False]])

#  & 并且
n2[(n2>4) & (n2<18)]
# array([ 5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17])

#  | 或  满足其中一个条件即可
n2[(n2>4) | (n2<18)]
# array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
#        17, 18, 19])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值