numpy基础(二)

numpy 数组索引及切片

一维数组的索引以及切片

在numpy 中一维数组的切片和python中的列表一样。切片左闭右开。


In [18]: a
Out[18]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [19]: a[2]
Out[19]: 2

In [20]: a[:3]
Out[20]: array([0, 1, 2])
多维数据的索引及切片

多维一般指二维数组,切片的方式有两个写法:

In [22]: a = np.arange(15).reshape(3,5)

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

In [24]: a[1,1]
Out[24]: 6

In [25]: a[1][1]
Out[25]: 6

三维就把二维的进化一下就好了:
按照先维度后行后列。

In [29]: a
Out[29]:
array([[[ 0,  1],
        [ 2,  3]],

       [[ 4,  5],
        [ 6,  7]],

       [[ 8,  9],
        [10, 11]]])

In [30]: a[1,1,1]
Out[30]: 7

布尔型的索引及切片

In [34]: a = np.arange(12).reshape(3,4)

In [35]: a
Out[35]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

In [36]: a > 5
Out[36]:
array([[False, False, False, False],
       [False, False,  True,  True],
       [ True,  True,  True,  True]])

通常情况下,我们是用来筛选的:

In [37]: a[a>5]
Out[37]: array([ 6,  7,  8,  9, 10, 11])

这样就可以了。

numpy随机数

以正态分布和均匀分布生成的随机数。
均匀分布生成的随机数:

# 以均匀分布的方式生成随机数
# numpy.random.rand() 生成一个0-1之间的随机浮点数或N维浮点数
In [1]: import numpy as np

In [2]: np.random.rand()
Out[2]: 0.7056668317530578

In [3]: np.random.rand(3,3)
Out[3]:
array([[0.85244573, 0.43591207, 0.98709316],
       [0.16660604, 0.84830518, 0.14701655],
       [0.06542728, 0.4029084 , 0.69642433]])

In [4]: np.random.rand(2,2,2)
Out[4]:
array([[[0.19348656, 0.61931929],
        [0.40640615, 0.89262989]],

       [[0.82513219, 0.16872264],
        [0.20941504, 0.47643563]]])

正态分布生成的随机数:

In [5]: np.random.randn()
Out[5]: 0.06686851978010712

In [6]: np.random.randn(3,3)
Out[6]:
array([[-1.66678949, -1.81216186, -0.12748947],
       [ 0.91738847, -0.7739602 ,  0.27155456],
       [ 0.34947274,  0.0610055 ,  1.16152738]])

In [7]: np.random.randn(2,2,2)
Out[7]:
array([[[-0.96374594,  0.00700868],
        [ 0.18058655, -1.42383515]],

       [[-0.88401762, -0.00433659],
        [ 1.54101661,  1.51848019]]])

这样看起来太不直观了,画个图吧

import matplotlib.pyplot as plt

b = np.random.rand(500)
a = np.random.rand(500)

c = np.random.rand(500)
d = np.random.rand(500)
plt.scatter(a,b)
plt.scatter(c,d)
plt.show()

这是随机分布的图:


随机分布图

这是正态分布的图:


正态分布

numpy 随机数的其他用法

在1-10之间随机生成整数

In [36]: np.random.randint(1,10)
Out[36]: 5
# 生成指定数量的随机数
In [37]: np.random.randint(1,10,size=5)
Out[37]: array([5, 4, 7, 2, 2])
# 二维
In [38]: np.random.randint(1,10,size=(2,5))
Out[38]:
array([[2, 7, 2, 9, 1],
       [4, 8, 6, 3, 1]]) 
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容