NumPy基本数据结构

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

一、NumPy是什么?

        NumPy 是用于 Python 中科学计算的一个基础包。它提供了一个多维度的数组对象,以及针对数组对象的各种快速操作,例如排序、变换,选择等操作

二、使用步骤

1.安装部署

Conda 安装:

conda install numpy

pip 安装:

pip install numpy

2.NumPy数组

        在 NumPy 中,数组是由 numpy.ndarray 类来实现的,它是 NumPy 的核心数据结构。

2.1创建数组

         最简单的方法就是把一个列表传入到 np.array() 或 np.asarray() 中,这个列表可以是任意维度的。np.array() 属于深拷贝,np.asarray() 则是浅拷贝。

import  numpy as np
#创建一个一维数组
arr_1_d = np.asarray([1])
print(arr_1_d)  #[1]
#创建一个二维数组
arr_2_d = np.asarray([[1, 2], [3, 4]])
print(arr_2_d) #[[1 2] 
               # [3 4]]

2.2数组的属性

 ndim

 ndim表示数组维度(轴)的个数

import  numpy as np
#创建一个一维数组
arr_1_d = np.asarray([1])

#创建一个二维数组
arr_2_d = np.asarray([[1, 2], [3, 4]])

print(arr_1_d.ndim) #1
print(arr_2_d.ndim) #2

shape

shape 表示数组的维度或形状, 是一个整数的元组,元组的长度等于 ndim。

import  numpy as np
#创建一个一维数组
arr_1_d = np.asarray([1])

#创建一个二维数组
arr_2_d = np.asarray([[1, 2], [3, 4]])

print(arr_1_d.shape) #(1,)
print(arr_2_d.shape) #(2, 2)

 reshape() 函数

在不改变数组元素内容的情况下变换数组的形状。但是你需要注意的是,变换前与变换后数组的元素个数需要是一样的。

import  numpy as np
#创建一个一维数组
arr_1_d = np.asarray([1])
print(arr_1_d)  #[1]
#创建一个二维数组
arr_2_d = np.asarray([[1, 2], [3, 4]])
print(arr_2_d) #[[1 2]
                #[3 4]]
print(arr_2_d.reshape((1,4))) #[[1 2 3 4]]
print(arr_2_d.reshape((1,5))) #ValueError: cannot reshape array of size 4 into shape (1,5)

        还可以使用 np.reshape(a, newshape, order) 对数组 a 进行 reshape,新的形状在 newshape 中指定。这里需要注意的是,reshape 函数有个 order 参数,它是指以什么样的顺序读写元素,其中有这样几个参数。

        ‘C’:默认参数,使用类似 C-like 语言(行优先)中的索引方式进行读写。

        ‘F’:使用类似 Fortran-like 语言(列优先)中的索引方式进行读写。

        ‘A’:原数组如果是按照‘C’的方式存储数组,则用‘C’的索引对数组进行 reshape,否则使用’F’的索引方式。 

a = np.arange(6).reshape(2,3,order='C')
print(a) #[[0 1 2]
         # [3 4 5]]

b = np.arange(6).reshape(2,3,order='F')
print(b) #[[0 2 4]
          #[1 3 5]]

size

        size也就是数组元素的总数,它就等于 shape 属性中元素的乘积

import  numpy as np
arr_2_d = np.asarray([[1, 2], [3, 4]])
print(arr_2_d.size) #4

dtype

        dtype数组元素的类型,当创建时不指定类型NumPy 会自动进行判断,然后给一个默认的数据类型

import  numpy as np
#创建时不指定类型
arr_2_d = np.asarray([[1, 2], [3, 4]])
print(arr_2_d.dtype) #int32
#创建时指定类型
arr_3_d = np.asarray([[1, 2], [3, 4]],dtype=float)
print(arr_3_d.dtype) #float64

        数组的数据类型当然也可以改变,我们可以使用 astype() 改变数组的数据类型,不过改变数据类型会创建一个新的数组,而不是改变原数组的数据类型。 

import  numpy as np


arr_d = np.asarray([[1, 2], [3, 4]],dtype=float)
print(arr_d.dtype) #float64
arr_temp = arr_d.astype('int32')
print(arr_d.dtype)#float64
print(arr_temp.dtype)#int32

 np.ones() 与 np.zeros()

        np.ones() 用来创建一个全 1 的数组,np.zeros()用来创建一个全0 的数组,必须参数是指定数组的形状,可选参数是数组的数据类型。        

import  numpy as np
np.ones()
#Traceback (most recent call last):
#  File "E:\PythonProject\tensorflowdaletouyuce-master\lotto-master\Test.py", line 4, in <module>
#    np.ones()
#TypeError: ones() missing 1 required positional argument: 'shape'
# 报错原因是没有给定形状的参数
print(np.ones(shape=(2,3)))  #[[1. 1. 1.]
                              #[1. 1. 1.]]
print(np.ones(shape=(2,3), dtype='int32')) #[[1 1 1]
                                            #[1 1 1]]

np.arange() 

        可以使用 np.arange([start, ]stop, [step, ]dtype=None) 创建一个在[start, stop) 区间的数组

                start:可选参数,默认为 0。

                stop:必须参数,区间的终点,请注意,刚才说的区间是一个左闭右开区间,所以数组并不包含 stop。

                step:可选参数,默认是 1。
             

import  numpy as np


# 创建从0到4的数组
print(np.arange(5)) #[0 1 2 3 4]

# 从2开始到4的数组
print(np.arange(2,5))#[2 3 4]

# 从2开始,到8的数组,跨度是3
print(np.arange(2,9,3)) #[2 5 8]

np.linspace() 

        可以用 np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)创建一个数组,具体就是创建一个从开始数值到结束数值的等差数列。

                start:必须参数,序列的起始值。

                stop:必须参数,序列的终点。

                num:序列中元素的个数,默认是 50。

                endpoint:默认为 True,如果为 True,则数组最后一个元素是 stop。

                retstep:默认为 False,如果为 True,则返回数组与公差。

import  numpy as np


# 创建从1到5的有3个元素的等差数列且不包含Stop点
print(np.linspace(1,5,3,False)) #[1.         2.33333333 3.66666667]
# 创建从1到5的有3个元素的等差数列且包含Stop点
print(np.linspace(1,5,3,True)) #[1. 3. 5.]

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏铁锤砸羊排

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值