numpy数组操作

numpy

引言
  • python中用list保存一组值,可以用来作为数组使用,由于列表的元素可以是任何对象,英雌列表中所保存的是对象的指针,为了保存一个简单的[1,2,3],需要三个指正和三个整数对象,对于数值运算来说这种结果显然比较浪费你内存和CPU计算时间
  • 此外python还提供了一个array模块,array对象和列表不同,他直接保存数值,呵呵C语言的一位数据比较类似,但是由于它不支持多维,也没有各种运算函数,因此也不适合做数值运算
  • numpy的诞生弥补了这些不足,numpy提供了ndarray对象:是存储单一数据类型的多维数组

numpy是高性能科学计算和数据分析的基础包,支持为读书族与矩阵运算包括:

  • 一个强大的n为数组对象ndarray,具有适量算数运算和复杂广播能力的快速且节省时间的多维数组。
  • 用于对整组数据进行快速运算的标准数学函数
  • 对于读写磁盘数据的工具以及用于操作内存映射文件的工具
  • 线性代数,随机数生成以及傅里叶变换等功能

ndarray

  • N维数组对象ndarray是用于存放同类型元素的多维数组
  • ndarray中的每个元素在内存中都有相容存储大小的区域
  • ndarray中的每个元素是数据类型对象的对象简称dtype
  • 可以对数组进行索引和切片
  • 可以通过ndarray的方法和属性来访问和修改ndarray的内容

创建nadrray:创建数组最简单的办法就是使用array函数,它接受一切序列型的对象,然后产生一个含有传入数据的numpy数组,其中嵌套序列(等长列表组成的列表)将会被转化为一个多维数组

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

object 数组或嵌套的数列

dtype 数组元素的数据类型 可选

copy 对象是否需要复制

order 创建数组的样式,c为行方向,F为列方向,A为任意方向

subok 默认返回一个与基类类型一致的数组

ndmin 指定生成数组的最小维度

import numpy as np
a = [1,2,3,4]
b = np.array(a)
print(b)
>>> array([1,2,3,4])
c = np.array([[1,2],[3,4]])
print(c)
>>>>[[1,2]
[3,4]]

除了np.array之外,还有一些函数也可以新建数组:

  • zrrors和ones分别可以创建指定长度或者形状的全0或1数组
  • empty可以创建一个没有任何具体值的数组
np.zeros(3) # 全0数组
np.ones(3) # 全1数组
np.zeros((3,3)) #全0二维数组 三行三列
np.zeros((3,1))  # 0二维数组 三行一列
np.zeros((1,3))
np.ones((3,3))
np.identity(3) #单位矩阵,三行三列

ndarray之创建数组

创建随机数

  • 均匀分布
    • np.random.rand(10,10) 创建指定形状(示例为10行10列)的数组(范围在0-1之间)
    • np.random.uniform(0,100) 创建指定范围内的一个数
    • np.random.randint(0,100) 创建指定范围内的整数
  • 正态分布
    • np.random.normal(1.75,0.1,(2,3)) 给定均值/标准差/维度的正态分布
创建随机数组
np.random.randint(0,50,5) # 随机数组,5个0-50之间的数字
np.random.randint(0,50,(3,5)) #3行5列 供15个随机数,都在0-50之间
np.random.rand(10) #10个结余[0,1)之间的随机数
np.random.standard_noraml(5) #从标准正太分部中随机采样5个数字

ndarray的数组属性

用法说明
b.size数组元素个数
b.shape数组形状
b.ndim数组维度
b.dtype数组元素类型
b.ltemsize数组元素字节大小

b.reshape()可以更改形状(3,2)变(2,3)或者其他

数组和标量之间的运算

数组很重要,因为它可以是我们不用编写循环即可对数据执行批量运算,这通常叫做矢量化,大小相同的数组之间的任何算数运算都会将运算应用到元素级,同样,数组与标量的算数运算也会将那个表两只传播到各个元素

arr = np.array([[1.,2.,3.],[4.,5.,6.]])
print(arr)
>>>array([[1., 2., 3.],
       [4., 5., 6.]])
print(1/array)
>>>array([[1.        , 0.5       , 0.33333333],
       [0.25      , 0.2       , 0.16666667]])
print(arr-arr)
>>>array([[0., 0., 0.],
       [0., 0., 0.]])
print(arr*arr)
>>>array([[ 1.,  4.,  9.],
       [16., 25., 36.]])
print(arr*0.5)
>>>array([[0.5, 1. , 1.5],
       [2. , 2.5, 3. ]])

基本的索引和切片

  • 选取数据子集或单个元素的方式很多
  • 以为数组很简单,从表面上看,他们跟python列表差不多
  • 一位数组跟列表最重要的区别在于,数组切片是原始数据的视图,这意味着数据不会被复制,数组视图上任何修改都会直接反应到原始数组上
  • 将一个表两只赋值给一个切片是,该值会自动传播到整个选取
arr = np.arange(10)
print(arr[5])
>>>5
print(arr[5:8])
>>>array([5,6,7])
print(arr[5:8]=12)
>>>array([0,1,2,3,4,12,12,12,8,9])
arr_slice = arr[5:8]
arr_slice[1] = 12345
print(arr)
>>>array([0,1,2,3,4,12,12345,12,8,9])
arr_slice[:] = 64
print(arr)
>>>array([0,1,2,3,4,64,64,64,8,9])
  • 在二维数组中,个所有位置上的元素不再是标量,而是一维数组
  • 可以对个元素进行递归访问,但这样有点麻烦
  • 传入一个以逗号隔开的所有列表来选取单个元素
  • 在多维数组中,如果省略了后面的索引,则返回对象会使一个维度低一点的ndarray
arr3d = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print(arr3d)
>>>array([[[ 1,  2,  3],
        [ 4,  5,  6]],
       [[ 7,  8,  9],
        [10, 11, 12]]])
print(arr3d[0])
>>>array([[1, 2, 3],
       [4, 5, 6]])
print(arr3d[0][1])
>>>array([4, 5, 6])

数学和统计方法

可以通过数组上的一组数学函数对整个 数组或者某个轴向的数据进行统计计算

方法说明
sum对数组中全部或轴向元素求和。零长度的数组的sum为0
mean算数平均数,零长度的数组的mean为NAN
std,var分别为标准差和方差,自由度可调(默认为n)
min,max最小值和最大值
argmin,argmax分别为最小值和最大值的索引
cumsum所有元素的累加
cumprod所有元素的累积
arr = np.random.randn(5,4) #5行4列的正太分部的数据
print(arr.mean()) #这个值和下面方法的值相同
print(np.mean(arr))
print(arr.sum())

值得注意的是:

mean和sum这类的函数可以接受一个axis参数(用于计算该轴向上的统计值)

arr.mean(axis=1)
arr.sum(0)

cumsum:按照所给定的周参数返回元素的梯形累积和,axis=0,按照行累加。axis=1,按照列累加

cumprod:按照所给定的周参数返回元素的梯形累积乘积,axis=0,按照行累积,axis=1按照列累积

arr = np.array([[0,1,2],[3,4,5],[6,7,8]])
arr.cumsum(0)
>>>array([[ 0,  1,  2],
       [ 3,  5,  7],
       [ 9, 12, 15]], dtype=int32)
arr.cumprod(1)
>>>array([[  0,   0,   0],
       [  3,  12,  60],
       [  6,  42, 336]], dtype=int32)

如果想获取更多有关python的信息,和想玩python制作的小程序,可以关注微信公众号(dreamspy)。我们一起用python改变世界,一起用python创造梦想。
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 NumPy 库中的 `numpy.array` 函数将 Python 列表转换为 NumPy 数组。 举个例子,假设你有一个 Python 列表 `a`,可以这样转换: ``` import numpy as np a = [1, 2, 3] b = np.array(a) ``` 这样,变量 `b` 就是一个 NumPy 数组,包含了列表 `a` 中的元素。 你还可以指定数组的数据类型,例如: ``` c = np.array(a, dtype=np.float) ``` 这样,变量 `c` 就是一个浮点数组,包含了列表 `a` 中的元素。 ### 回答2: 要将数组转换为NumPy数组,可以使用`numpy.array()`函数。 这个函数接受一个数组作为参数,并返回一个NumPy数组对象。例如,假设我们有一个列表或元组的数组: ```python arr = [1, 2, 3, 4, 5] ``` 现在,我们可以通过将其作为参数传递给`numpy.array()`函数来转换为NumPy数组: ```python import numpy as np np_arr = np.array(arr) ``` 转换后,`np_arr`将成为一个NumPy数组对象,我们可以使用NumPy提供的各种函数和方法对其进行操作和处理。 另外,我们也可以将多维数组转换为NumPy数组。例如,假设我们有一个二维列表作为数组: ```python arr_2d = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] ``` 我们可以使用同样的方法将其转换为NumPy数组: ```python np_arr_2d = np.array(arr_2d) ``` `np_arr_2d`现在将成为一个二维的NumPy数组对象,我们可以使用NumPy的函数和方法对其进行相关操作和运算。 总结起来,要将数组转换为NumPy数组,只需要将数组作为参数传递给`numpy.array()`函数即可。转换后,我们就可以利用NumPy提供的强大功能来处理和分析数据。 ### 回答3: 数组可以被转换成NumPy数组通过使用NumPy库的array()函数。首先,我们需要导入NumPy库。然后,我们可以使用array()函数来将列表或元组转换为NumPy数组。 下面是一个简单的例子,展示如何将列表转换为NumPy数组: ``` import numpy as np my_list = [1, 2, 3, 4, 5] my_array = np.array(my_list) print(my_array) ``` 输出结果为:[1 2 3 4 5] 同样的方式也可以用于将元组转换为NumPy数组: ``` import numpy as np my_tuple = (1, 2, 3, 4, 5) my_array = np.array(my_tuple) print(my_array) ``` 输出结果为:[1 2 3 4 5] 我们还可以将多维的列表或元组转换为NumPy的多维数组。例如,将一个包含多个子列表的列表转换为NumPy 2D数组: ``` import numpy as np my_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] my_array = np.array(my_list) print(my_array) ``` 输出结果为: ``` [[1 2 3] [4 5 6] [7 8 9]] ``` 通过以上方法,我们可以将Python内置的列表或元组转换为NumPy数组,从而可以使用NumPy提供的更多高级功能进行数组操作

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值