NumPy学习1之生成numpy数组

1. numpy 数组

numpy研究的对象就是n维数组,在numpy中,这些数组都属于ndarray类型,意为n-dim数组。由于numpy的高效性,目前已经属于python非标准模块中最重要的模块之一,下面给出一个例子来测试numpy的计算效率。

import numpy as np
my_arr = np.arange(1000000)
my_list = list(range(1000000))
%time for _ in range(10): my_arr2 = my_arr * 2

Wall time: 38 ms

%time for _ in range(10): my_list2 = [x * 2 for x in my_list]

Wall time: 785 ms

由此可以看出在执行矩阵的相关计算时,numpy要比传统的python列表至少快一个数量级


2. numpy数组的生成

numpy中定义了一些生成ndarray类型对象(即numpy数组)的方法:

方法名主要功能
array(object)object一般是序列对象,如列表、元组等
asarray(a)将a转换为numpy数组,a一般是列表、元组以及numpy数组等
arange([start, ]stop, [step, ])生成一维数组,类似python中的range
ones(shape)生成全部是1的数组
ones_like(a)生成与a形状相同的全1数组
zeros(shape)生成全部是0的数组
zeros_like(a)生成与a形状相同的全0数组
empty(shape)生成未初始化的数组
empty_like(a)生成与a形状相同的未初始化的数组
full(shape, fill_value)生成元素全部是fill_value的数组
full_like(a, fill_value)生成与a形状相同且元素都是fill_value的数组
eye(N, M=None, k=0)生成类似单位矩阵的数组,可视为identity的加强版
identity(n)生成n*n的单位矩阵

2.1 array与asarray

这两个方法都是将一些(类)数组对象转换为数组对象


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

array([1, 2, 3])

np.array((2, 3, 5))

array([2, 3, 5])

np.asarray(np.array([1.2, 2.3, 2.1]))

array([1.2, 2.3, 2.1])


2.2 arange

arange用来生成一维序列型数组,类似与python3中的range

  • arange([start, ]stop, [step])
  • start为序列的起始值,缺省为0
  • stop为序列的结束值(不能取到)
  • step为步长,缺省为1

np.arange(15)

array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])

np.arange(2, 8, 2)

array([2, 4, 6])

np.arange(10, 1, -3)

array([10, 7, 4])


2.3 ones,ones_like,zeros,zeros_like,empty,empty_like

ones, zeros, empty分别生成全1、全0、全部未定义的数组,数组的尺寸由参数shape确定

ones_like, zeros_like, empty_like分别生成全1、全0、全部未定义的数组,数组的尺寸与数组a相同

需要注意的是,由emptyempty_like生成的数组中的元素未定义,显示出来的数值只是随机给出的,不能直接使用


arr = np.ones((3, 4))

array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])

np.zeros_like(arr)

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


2.4 full与full_like

3中的方法将数组中的所有元素都设置为0,1等比较 特殊的数值,而full方法可以将数组以任意数值填充。
full(shape, fill_value)
full_like(a, fill_value)

  • shape为数组的形状
  • a为数组
  • fill_value为填充值

np.full((3, 6), 6)

array([[6, 6, 6, 6, 6, 6],
[6, 6, 6, 6, 6, 6],
[6, 6, 6, 6, 6, 6]])


2.5 eye与identity

identity(n)

  • 生成n*n的单位矩阵(主对角线上的元素为1,其余位置上的元素为0)

np.identity(3)

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


eye(N, M=None, k=0)

  • 生成N*M的数组,一些元素是1,一些元素是0
    k=0时,主对角线上的元素为1,其余位置上的元素为0
    k>0时,主对角线向右上方平行移动k个单位,到达位置的元素为1,其余位置上的元素为0
    k<0时,主对角线向左下方平行移动k个单位,到达位置的元素为1,其余位置上的元素为0
  • M=None时,生成N*N的数组
  • eye可以视为加强版的identity

np.eye(4, 6)

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.]])

np.eye(4, 6, 1)

array([[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
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值