numpy创建array的方法汇总

2020年7月6日 / 17次阅读 / Last Modified 2020年7月7日
NumPy

创建numpy.array,是使用numpy这个核武器的基础,本文尽量汇总常用创建numpy.array的方法。

array函数

>>> import numpy as np
>>> a = np.array([1,2,3,4,5])
>>> a
array([1, 2, 3, 4, 5])
>>> a.shape
(5,)
>>> a.ndim
1
>>> a.dtype
dtype('int32')
>>>
>>> b = np.array((1,2,3,4,5.0))
>>> b
array([1., 2., 3., 4., 5.])
>>> b.shape
(5,)
>>> b.ndim
1
>>> b.dtype
dtype('float64')

a用list创建,b用tuple创建,都一样。注意创建b时,tuple中有一个float,这时numpy将所有数据都转换成了它自己的float64类型。numpy.array中不允许有不同类型的数据同时存在。

我们还可以通过array函数创建多维数组:

>>> c = np.array(([1,2,3],[4,5,6],[7,8,9]))
>>> c
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> c.shape
(3, 3)
>>> c.ndim
2
>>>
>>> d = np.array([[1,2,3],[4,5,6],[7,8,9.0]])
>>> d.dtype
dtype('float64')
>>> d
array([[1., 2., 3.],
       [4., 5., 6.],
       [7., 8., 9.]])

创建array时,可以指定dtype:

>>> e = np.array((1,2,3), dtype=np.int64)
>>> e
array([1, 2, 3], dtype=int64)
>>>
>>> f = np.array((1,2,3), dtype=np.float16)
>>> f
array([1., 2., 3.], dtype=float16)

zeros函数

用zeros函数创建全0的array:

>>> a = np.zeros((2,3))
>>> a
array([[0., 0., 0.],
       [0., 0., 0.]])
>>>
>>> b = np.zeros((3,5), dtype=np.int8)
>>> b
array([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0]], dtype=int8)

zeros_like函数

创建一个全0的,跟输入的array的shape一样的:

>>> a = np.array([[1,2,3],[4,5,6]])
>>> a
array([[1, 2, 3],
       [4, 5, 6]])
>>> b = np.zeros_like(a)
>>> b
array([[0, 0, 0],
       [0, 0, 0]])
>>> a.shape
(2, 3)
>>> b.shape
(2, 3)
>>> c = np.zeros_like(a, dtype=np.uint8)
>>> c
array([[0, 0, 0],
       [0, 0, 0]], dtype=uint8)
>>> c.shape
(2, 3)

ones函数

跟zeros函数一样,创建全1的numpy.array,代码略。

ones_like函数

跟zeros_like函数一样,全1而已,注意这些函数都可以指定dtype。

empty函数

跟zeros和ones一样,不一样的地方在于,empty函数不对数据做初始化,即所有的内部数据都是随机的,看内存什么样子。有的时候使用empty函数,不做初始化,还可以进一步提高计算速度。

>>> a = np.empty((5,5))
>>> a
array([[0.00000000e+000, 2.30226697e-307, 2.30240278e-307,
        2.30259291e-307, 2.30275588e-307],
       [2.13425923e-307, 2.13439504e-307, 2.13453085e-307,
        2.13473456e-307, 2.13493827e-307],
       [2.13504692e-307, 2.13527779e-307, 2.13554940e-307,
        2.13572595e-307, 2.13591609e-307],
       [2.51437149e-307, 2.51456162e-307, 2.51476533e-307,
        2.51500978e-307, 2.51517275e-307],
       [2.51537647e-307, 2.51562092e-307, 2.51582463e-307,
        2.51598760e-307, 2.28647257e-317]])

empty_like函数

跟其它*_like函数一样,也跟自己的empty一样,不做初始化。代码略。

arange函数

a range,一个范围,就像python内置的range一样:

>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b = np.arange(0,100,5)
>>> b
array([ 0,  5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80,
       85, 90, 95])
>>> c = np.arange(20).reshape(5,4)
>>> c
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19]])
>>> c.shape
(5, 4)
>>>
>>> d = np.arange(0,1,0.01).reshape(10,10)
>>> d
array([[0.  , 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09],
       [0.1 , 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19],
       [0.2 , 0.21, 0.22, 0.23, 0.24, 0.25, 0.26, 0.27, 0.28, 0.29],
       [0.3 , 0.31, 0.32, 0.33, 0.34, 0.35, 0.36, 0.37, 0.38, 0.39],
       [0.4 , 0.41, 0.42, 0.43, 0.44, 0.45, 0.46, 0.47, 0.48, 0.49],
       [0.5 , 0.51, 0.52, 0.53, 0.54, 0.55, 0.56, 0.57, 0.58, 0.59],
       [0.6 , 0.61, 0.62, 0.63, 0.64, 0.65, 0.66, 0.67, 0.68, 0.69],
       [0.7 , 0.71, 0.72, 0.73, 0.74, 0.75, 0.76, 0.77, 0.78, 0.79],
       [0.8 , 0.81, 0.82, 0.83, 0.84, 0.85, 0.86, 0.87, 0.88, 0.89],
       [0.9 , 0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 0.97, 0.98, 0.99]])

跟python内置的range不一样的地方是,step可以是小数,不过一般不建议这样用,要产生均匀间隔的数据,建议使用下面这个函数:linspace

linspace函数

设置起点和终点,设置一共取多少个数:

>>> a = np.linspace(0,1,100).reshape(10,10)
>>> a
array([[0.        , 0.01010101, 0.02020202, 0.03030303, 0.04040404,
        0.05050505, 0.06060606, 0.07070707, 0.08080808, 0.09090909],
       [0.1010101 , 0.11111111, 0.12121212, 0.13131313, 0.14141414,
        0.15151515, 0.16161616, 0.17171717, 0.18181818, 0.19191919],
       [0.2020202 , 0.21212121, 0.22222222, 0.23232323, 0.24242424,
        0.25252525, 0.26262626, 0.27272727, 0.28282828, 0.29292929],
       [0.3030303 , 0.31313131, 0.32323232, 0.33333333, 0.34343434,
        0.35353535, 0.36363636, 0.37373737, 0.38383838, 0.39393939],
       [0.4040404 , 0.41414141, 0.42424242, 0.43434343, 0.44444444,
        0.45454545, 0.46464646, 0.47474747, 0.48484848, 0.49494949],
       [0.50505051, 0.51515152, 0.52525253, 0.53535354, 0.54545455,
        0.55555556, 0.56565657, 0.57575758, 0.58585859, 0.5959596 ],
       [0.60606061, 0.61616162, 0.62626263, 0.63636364, 0.64646465,
        0.65656566, 0.66666667, 0.67676768, 0.68686869, 0.6969697 ],
       [0.70707071, 0.71717172, 0.72727273, 0.73737374, 0.74747475,
        0.75757576, 0.76767677, 0.77777778, 0.78787879, 0.7979798 ],
       [0.80808081, 0.81818182, 0.82828283, 0.83838384, 0.84848485,
        0.85858586, 0.86868687, 0.87878788, 0.88888889, 0.8989899 ],
       [0.90909091, 0.91919192, 0.92929293, 0.93939394, 0.94949495,
        0.95959596, 0.96969697, 0.97979798, 0.98989899, 1.        ]])

从0到1,100个数。

reshape函数

顾名思义吧,就是一个数组重新变换一下形状,变成多维的。上面的代码已经有很多地方在直接使用reshape函数了,请参考。

再给一个用reshape将一维转四维的示例:

>>> a = np.linspace(0,1,100).reshape(2,5,2,5)
>>> a
array([[[[0.        , 0.01010101, 0.02020202, 0.03030303, 0.04040404],
         [0.05050505, 0.06060606, 0.07070707, 0.08080808, 0.09090909]],

        [[0.1010101 , 0.11111111, 0.12121212, 0.13131313, 0.14141414],
         [0.15151515, 0.16161616, 0.17171717, 0.18181818, 0.19191919]],

        [[0.2020202 , 0.21212121, 0.22222222, 0.23232323, 0.24242424],
         [0.25252525, 0.26262626, 0.27272727, 0.28282828, 0.29292929]],

        [[0.3030303 , 0.31313131, 0.32323232, 0.33333333, 0.34343434],
         [0.35353535, 0.36363636, 0.37373737, 0.38383838, 0.39393939]],

        [[0.4040404 , 0.41414141, 0.42424242, 0.43434343, 0.44444444],
         [0.45454545, 0.46464646, 0.47474747, 0.48484848, 0.49494949]]],


       [[[0.50505051, 0.51515152, 0.52525253, 0.53535354, 0.54545455],
         [0.55555556, 0.56565657, 0.57575758, 0.58585859, 0.5959596 ]],

        [[0.60606061, 0.61616162, 0.62626263, 0.63636364, 0.64646465],
         [0.65656566, 0.66666667, 0.67676768, 0.68686869, 0.6969697 ]],

        [[0.70707071, 0.71717172, 0.72727273, 0.73737374, 0.74747475],
         [0.75757576, 0.76767677, 0.77777778, 0.78787879, 0.7979798 ]],

        [[0.80808081, 0.81818182, 0.82828283, 0.83838384, 0.84848485],
         [0.85858586, 0.86868687, 0.87878788, 0.88888889, 0.8989899 ]],

        [[0.90909091, 0.91919192, 0.92929293, 0.93939394, 0.94949495],
         [0.95959596, 0.96969697, 0.97979798, 0.98989899, 1.        ]]]])

eye函数

eye函数应该是取I的谐音,用于创建单位矩阵(Identity matrix):

>>> a = np.eye(5)
>>> a
array([[1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 1.]])
>>>
>>> a = np.eye(7)
>>> a
array([[1., 0., 0., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0., 0., 0.],
       [0., 0., 1., 0., 0., 0., 0.],
       [0., 0., 0., 1., 0., 0., 0.],
       [0., 0., 0., 0., 1., 0., 0.],
       [0., 0., 0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 0., 0., 1.]])
>>>
>>> a = np.eye(7, dtype=np.uint8)
>>> a
array([[1, 0, 0, 0, 0, 0, 0],
       [0, 1, 0, 0, 0, 0, 0],
       [0, 0, 1, 0, 0, 0, 0],
       [0, 0, 0, 1, 0, 0, 0],
       [0, 0, 0, 0, 1, 0, 0],
       [0, 0, 0, 0, 0, 1, 0],
       [0, 0, 0, 0, 0, 0, 1]], dtype=uint8)

full函数

用同一个固定的数字来填满array中所有的空隙,zeros是用0填,ones是用1填,empty是不填,随机。

>>> a = np.full((3,4), 8)
>>> a
array([[8, 8, 8, 8],
       [8, 8, 8, 8],
       [8, 8, 8, 8]])
>>> a
array([[8, 8, 8, 8],
       [8, 8, 8, 8],
       [8, 8, 8, 8]])
>>>
>>> a = np.full((3,4), 8, dtype=np.float64)
>>> a
array([[8., 8., 8., 8.],
       [8., 8., 8., 8.],
       [8., 8., 8., 8.]])
>>> a = np.full((3,4,5), 8, dtype=np.float64)
>>> a
array([[[8., 8., 8., 8., 8.],
        [8., 8., 8., 8., 8.],
        [8., 8., 8., 8., 8.],
        [8., 8., 8., 8., 8.]],

       [[8., 8., 8., 8., 8.],
        [8., 8., 8., 8., 8.],
        [8., 8., 8., 8., 8.],
        [8., 8., 8., 8., 8.]],

       [[8., 8., 8., 8., 8.],
        [8., 8., 8., 8., 8.],
        [8., 8., 8., 8., 8.],
        [8., 8., 8., 8., 8.]]])

-- EOF --

本文链接:https://www.pynote.net/archives/2155

留言区

电子邮件地址不会被公开。 必填项已用*标注


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top