一:Numpy

# 数组和列表的效率问题,谁优谁劣

# 1.循环遍历
import numpy as np
import time
my_arr = np.arange(1000000)
my_list = list(range(1000000)) def arr_time(array):
s = time.time()
for _ in array:
_ * 2
e = time.time()
return e - s def list_time(list):
s = time.time()
for _ in list:
_ * 2
e = time.time()
return e - s ret1 = arr_time(my_arr)
print("数组运行的时间是{}".format(ret1))
ret2 = list_time(my_list)
print("列表运行的时间是{}".format(ret2)) # 结果
数组运行的时间是0.2110121250152588 # 遍历,列表快
列表运行的时间是0.04800271987915039 # 2.自身扩容
import numpy as np
import time my_arr = np.arange(1000000)
my_list = list(range(1000000)) def arr_time(array):
s = time.time()
for _ in range(10):
array * 2
e = time.time()
return e - s def list_time(list):
s = time.time()
for _ in range(10):
list * 2
e = time.time()
return e - s ret1 = arr_time(my_arr)
print("数组运行的时间是{}".format(ret1))
ret2 = list_time(my_list)
print("列表运行的时间是{}".format(ret2))
# 结果
数组运行的时间是0.018001317977905273 # 扩容,数组快
列表运行的时间是0.2950167655944824

numpy处理数据快的原因是:在一个连续的内存块中取存取数据。

1.  numpy中的ndarray:一种多维的数组对象,是一种快速灵活的大数据容器。

创建ndarray:数组的创建最简单的办法就是使用array函数,它接收一切序列型的对象,其中也包括数组。

data = [1,2,3,4,5]
arr1 = np.array(data)
print(arr1)
# [1,2,3,4,5] 将python的列表,转成数组
data = [[1,2,3,4,5],[6,7,8,9,10]]
arr2 = np.array(data)
print(arr2) [[ 1 2 3 4 5]
[ 6 7 8 9 10]]

查看数组的维度和形状

w1 = arr1.ndim  # 维度
s1 = arr1.shape # 形状
w2 = arr2.ndim
s2 = arr2.shape
print("数组arr1的维度是{},形状是{}".format(w1,s1))
print("数组arr2的维度是{},形状是{}".format(w2,s2))
数组arr1的维度是1,形状是(5,)
数组arr2的维度是2,形状是(2, 5)

其他形式的创建数组

np.zeros(20)

# 结果
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0.]) np.zeros((3,6))
# 结果
array([[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.]]) np.ones(10)
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])

np.ones((3,6))
array([[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.]])

np.arrange(10)是python中range的数组版本

np.arange(10)
#
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

2  numpy中的ndarray的数据类型

创建时候指定数据类型

data = [1,2,3,4,5]
arr3 = np.array(data,dtype=np.float64)
print(arr3.dtype)
#
float64

数组数据类型转换

data = [1,2,3,4,5]
arr4 = np.array(data)
print(arr4.dtype)
# int32
float_arr4 = arr4.astype(np.float64)
print(float_arr4.dtype)
# float64

注意:浮点型,转为整形,小数点后面的数组,自动去除,类型与python中的取整。

data = [1.1,2,1,3,1,4,1]
arr5 = np.array(data)
print(arr5.dtype)
int_arr5 = arr5.astype(np.int32)
print(int_arr5.dtype)
#
float64
int32
print(int_arr5)
#
[1 2 1 3 1 4 1]

注意:astype可以将某些全是数值类型的字符串转成数值形式  str = "123456"

demo = ["","",""]
demo_str = np.array(data)
new_demo = demo_str.astype(float)
new_demo
#
array([1.1, 2. , 1. , 3. , 1. , 4. , 1. ]) # 结果很奇怪

二:numpy数组的运算

加减乘除

arr6 = np.array([[1,2,3,4,5],[6,7,8,9,10]])
arr6 # 结果
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10]]) arr6 + arr6 # 结果
array([[ 2, 4, 6, 8, 10],
[12, 14, 16, 18, 20]]) arr6 - arr6 # 结果
array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]]) arr6 * arr6 # 结果
array([[ 1, 4, 9, 16, 25],
[ 36, 49, 64, 81, 100]]) 1 / arr6 # 结果
array([[1. , 0.5 , 0.33333333, 0.25 , 0.2 ],
[0.16666667, 0.14285714, 0.125 , 0.11111111, 0.1 ]])

数组之间的比值,产生布尔数组

arr6
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10]]) arr7 = np.array([[5,4,1,2,3],[6,8,10,9,7]])
arr7 array([[ 5, 4, 1, 2, 3],
[ 6, 8, 10, 9, 7]]) arr6 > arr7 # 结果
array([[False, False, True, True, True],
[False, False, False, False, True]])

# 数组与常量进行加减乘除,或者数组之间的比较,叫做广播

切片和索引

一维数组的切片和索引

# 一维数组的索引和切片  非常类似于python列表的操作
arr1 = np.arange(10)
arr1
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr1[0]
0
arr1[0:-1]
array([0, 1, 2, 3, 4, 5, 6, 7, 8])

注意:不同于列表的地方是:

arr1[:] = 0  # 可以对切片进行改值,将范围内的所有元素改成统一值
arr1
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
arr_slice = arr1[1:3]
arr_slice
array([0, 0])
arr_slice[0] = 1 # 切片不是python字典中的浅拷贝,切片后的元素也是映射到源数组,因此改变切片的内容,也会影响源数组的内容
arr1
array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0])

注意:虽然会影响到源数组,通过复制切片,再进行修改就不会影响到源数组。

arr_slice2 = arr1[1:3].copy()
arr_slice2
array([1, 0])
arr_slice2[0] = 100
arr1
array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0])

高维数组的切片和索引:高维数组的索引,不在是数,而是一个数组

二维数组

arr2 = np.array([[1,3],[2,4]])
arr2
array([[1, 3],
[2, 4]])
arr2[0]
array([1, 3])
arr2[1]
array([2, 4])
arr2[1][0]
2
arr2[1][1]
4

三维数组

arr3 = np.array([[[1,2,1],[3,4,3],[5,6,5]]])
arr3 array([[[1, 2, 1],
[3, 4, 3],
[5, 6, 5]]]) arr3[0] array([[1, 2, 1],
[3, 4, 3],
[5, 6, 5]]) arr3[1]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-100-cac0cac14f9a> in <module>
----> 1 arr3[1] IndexError: index 1 is out of bounds for axis 0 with size 1 # 因为arr3不是这种结构[[ [],[],[] ],[ [],[],[] ],[ [],[],[] ],[ [],[],[] ]]
arr3[0] 只能取,第一个二维索引,arr3中也只有一个二维索引,1会越界。

注意:arr3[0] 可以用标量和数组进行赋值

arr3[0] = 1
arr3
array([[[1, 1, 1],
[1, 1, 1],
[1, 1, 1]]])
arr3[0] = [[0,0,0],[0,0,0],[0,0,0]]
arr3
array([[[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]])

注意:三维数组的连续索引

arr3[0][1]
array([0, 0, 0]) arr3[0,1] # 等价于上面一个
array([0, 0, 0])

二维数组的切片

arr = np.array([[1,2,3],[4,5,6],[7,8,9],[9,8,7],[6,5,4],[3,2,1]])
arr
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[9, 8, 7],
[6, 5, 4],
[3, 2, 1]]) arr[:3] # 这种形式的切片是按照x,也就是行,进行切片的。 array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
arr = np.array([[1,2,3],[4,5,6],[7,8,9],[9,8,7],[6,5,4],[3,2,1]])
arr
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[9, 8, 7],
[6, 5, 4],
[3, 2, 1]]) arr[:3] array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]) # 连续按照x轴,即行进行切,第二次切是对每一个一维数组进行切片。 arr[:3,1:]
array([[2, 3],
[5, 6],
[8, 9]])

二维数组来说切片 [控制行,控制列]

import numpy as np
import time
arr1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
arr1[1,:2] # 第二行的前两列
#结果
array([4, 5])
arr1[:2,2] # 第三列的前两行
#结果
array([3, 6])
arr1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
arr1[:,1:] # 所有行的第一列之后的所有 :表示所有
# 结果
array([[2, 3],
[5, 6],
[8, 9]])
arr1[1:,:] # 所有列的第一行到所有
# 结果
array([[4, 5, 6],
[7, 8, 9]])

二维切片的赋值也会广播到所有元素

arr1[1:,:] = 100
arr1
# 结果
array([[ 1, 2, 3],
[100, 100, 100],
[100, 100, 100]])

 布尔值索引

arr1 = np.array(["a","b","c","d","e","f","h"])
arr1
# 结果
array(['a', 'b', 'c', 'd', 'e', 'f', 'h'], dtype='<U1') data = np.random.randn(7,4) # 生成指定维度的列表,randn函数返回一个或一组样本,具有标准正态分布
data # 结果
array([[ 0.58942085, -0.68523013, -0.5892267 , -0.97875538],
[ 0.15429648, 1.56280897, 1.71407167, -0.91513437],
[ 1.88318536, -1.04312503, 0.22774029, 0.72447885],
[-0.14408123, 0.0250038 , 0.47380685, 1.67780702],
[-0.85254544, 0.6399932 , -0.63439896, 3.21059215],
[ 0.82560976, 0.84780371, 1.34085735, -0.54620446],
[ 0.60466595, 0.64945024, -0.76053927, -0.4420415 ]]) arr1 == "a"
#结果
array([ True, False, False, False, False, False, False]) data[arr1=="a"]
# 结果
array([[ 0.58942085, -0.68523013, -0.5892267 , -0.97875538]]) # 第一个为True,所以只显示第一行

关于np.random随机生成数组的其他用法

np.random.rand(4,3,2)   # 生成三维数组,4---包含四行,每行都是一个二维数组,3---包含三行,每个二维数组都是由三行一维数组组成,2---每个一维数组,包含二行,即二个元素。

# 结果
array([[[0.45843663, 0.30801374],
[0.50365738, 0.49775572],
[0.86671448, 0.83116069]], [[0.26553277, 0.06815584],
[0.72355103, 0.65145712],
[0.18559103, 0.77389285]], [[0.59710693, 0.4073068 ],
[0.13812524, 0.16268339],
[0.92289371, 0.45529381]], [[0.51111361, 0.63368562],
[0.93192965, 0.08373171],
[0.97425054, 0.53798492]]]) np.random.rand(4,3,3) # 结果
array([[[0.66847835, 0.96393834, 0.68099953],
[0.27228911, 0.01407302, 0.1067194 ],
[0.62624735, 0.58379371, 0.85244324]], [[0.15541881, 0.66438894, 0.92232019],
[0.26811429, 0.13868821, 0.50579811],
[0.55399624, 0.12154676, 0.06532324]], [[0.21546971, 0.10701104, 0.98175299],
[0.5240603 , 0.58015531, 0.65979757],
[0.4755814 , 0.34118265, 0.93017974]], [[0.87136945, 0.8724195 , 0.13122896],
[0.84908535, 0.50701899, 0.24765703],
[0.28119896, 0.76037353, 0.94389406]]])
data[arr1!="a"]
# 结果
array([[ 0.15429648, 1.56280897, 1.71407167, -0.91513437],
[ 1.88318536, -1.04312503, 0.22774029, 0.72447885],
[-0.14408123, 0.0250038 , 0.47380685, 1.67780702],
[-0.85254544, 0.6399932 , -0.63439896, 3.21059215],
[ 0.82560976, 0.84780371, 1.34085735, -0.54620446],
[ 0.60466595, 0.64945024, -0.76053927, -0.4420415 ]])

 ~非得意思:cont = arr1 == "a"  ~cont就是条件取反的意思

cont = arr1 != "a"
data[cont]
# 结果
array([[ 0.15429648, 1.56280897, 1.71407167, -0.91513437],
[ 1.88318536, -1.04312503, 0.22774029, 0.72447885],
[-0.14408123, 0.0250038 , 0.47380685, 1.67780702],
[-0.85254544, 0.6399932 , -0.63439896, 3.21059215],
[ 0.82560976, 0.84780371, 1.34085735, -0.54620446],
[ 0.60466595, 0.64945024, -0.76053927, -0.4420415 ]]) data[~cont]
# 结果
array([[ 0.58942085, -0.68523013, -0.5892267 , -0.97875538]])

布尔值的用处

1.让整个数组里面所有小于0的元素全部变成0

data

# 结果
array([[ 0.58942085, -0.68523013, -0.5892267 , -0.97875538],
[ 0.15429648, 1.56280897, 1.71407167, -0.91513437],
[ 1.88318536, -1.04312503, 0.22774029, 0.72447885],
[-0.14408123, 0.0250038 , 0.47380685, 1.67780702],
[-0.85254544, 0.6399932 , -0.63439896, 3.21059215],
[ 0.82560976, 0.84780371, 1.34085735, -0.54620446],
[ 0.60466595, 0.64945024, -0.76053927, -0.4420415 ]]) data[data<0] =0
data # 结果
array([[0.58942085, 0. , 0. , 0. ],
[0.15429648, 1.56280897, 1.71407167, 0. ],
[1.88318536, 0. , 0.22774029, 0.72447885],
[0. , 0.0250038 , 0.47380685, 1.67780702],
[0. , 0.6399932 , 0. , 3.21059215],
[0.82560976, 0.84780371, 1.34085735, 0. ],
[0.60466595, 0.64945024, 0. , 0. ]])

&和的意思,类似于and:

data
# 结果
array([[ 0.58942085, -0.68523013, -0.5892267 , -0.97875538],
[ 0.15429648, 1.56280897, 1.71407167, -0.91513437],
[ 1.88318536, -1.04312503, 0.22774029, 0.72447885],
[-0.14408123, 0.0250038 , 0.47380685, 1.67780702],
[-0.85254544, 0.6399932 , -0.63439896, 3.21059215],
[ 0.82560976, 0.84780371, 1.34085735, -0.54620446],
[ 0.60466595, 0.64945024, -0.76053927, -0.4420415 ]]) # 将里面大于0小于1的数字变成0 data[(data>0) & (data<1)] = 0
data # 结果
array([[0. , 0. , 0. , 0. ],
[0. , 1.56280897, 1.71407167, 0. ],
[1.88318536, 0. , 0. , 0. ],
[0. , 0. , 0. , 1.67780702],
[0. , 0. , 0. , 3.21059215],
[0. , 0. , 1.34085735, 0. ],
[0. , 0. , 0. , 0. ]])

 | 或的意思,类似于 or

data

# 结果
array([[ 0.58942085, -0.68523013, -0.5892267 , -0.97875538],
[ 0.15429648, 1.56280897, 1.71407167, -0.91513437],
[ 1.88318536, -1.04312503, 0.22774029, 0.72447885],
[-0.14408123, 0.0250038 , 0.47380685, 1.67780702],
[-0.85254544, 0.6399932 , -0.63439896, 3.21059215],
[ 0.82560976, 0.84780371, 1.34085735, -0.54620446],
[ 0.60466595, 0.64945024, -0.76053927, -0.4420415 ]]) 将小于0或者大于1的数修改为1 data[(data<0) | (data>1)] = 1
data
# 结果
array([[1. , 1. , 0.59208795, 1. ],
[1. , 1. , 1. , 1. ],
[1. , 0.0701599 , 1. , 0.15396346],
[1. , 1. , 1. , 0.2735209 ],
[1. , 1. , 1. , 1. ],
[1. , 1. , 1. , 0.06469213],
[1. , 1. , 1. , 1. ]])

 花式索引

np.empty()返回一个随机元素的矩阵,大小按照参数定义。不是字面意思上的空数组,需要自己调整参数。

data = np.empty((8,4))  # 本意想生成8行4列的二维空数组
data
# 结果
array([[9.34e-322, 0.00e+000, 0.00e+000, 0.00e+000],
[0.00e+000, 0.00e+000, 0.00e+000, 0.00e+000],
[0.00e+000, 0.00e+000, 0.00e+000, 0.00e+000],
[0.00e+000, 0.00e+000, 0.00e+000, 0.00e+000],
[0.00e+000, 0.00e+000, 0.00e+000, 0.00e+000],
[0.00e+000, 0.00e+000, 0.00e+000, 0.00e+000],
[0.00e+000, 0.00e+000, 0.00e+000, 0.00e+000],
[0.00e+000, 0.00e+000, 0.00e+000, 0.00e+000]]) # 空数组需要手动调整 for i in range(8):
data[i] = 0 data #结果
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])

 索引数组:按照顺序返回结果

for i in range(8):
data[i] = i data
# 结果 array([[0., 0., 0., 0.],
[1., 1., 1., 1.],
[2., 2., 2., 2.],
[3., 3., 3., 3.],
[4., 4., 4., 4.],
[5., 5., 5., 5.],
[6., 6., 6., 6.],
[7., 7., 7., 7.]]) # 按照顺序取出,每一行
data[[0,2,4,6]] data[[索引值]]
# 结果
array([[0., 0., 0., 0.],
[2., 2., 2., 2.],
[4., 4., 4., 4.],
[6., 6., 6., 6.]])
# 另一种方式
data[[i for i in range(len(data)) if i % 2 == 0]]
data
# 结果

 array([[0., 0., 0., 0.],
      [2., 2., 2., 2.],
     [4., 4., 4., 4.],
     [6., 6., 6., 6.]])

多个索引数组:以二维为例,返回的是一个一维数组

data = np.arange(32)
data
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31])
data = data.reshape(8,4)
data
array([[ 0, 1, 2, ],
[ 4, 5, 6, 7],
[ 8, 9, , 11],
[12, 13, 14, 15],
[16, , 18, 19],
[20, 21, 22, 23],
[, 25, 26, 27],
[28, 29, 30, 31]])
data[[0,2,4,6],[3,2,1,0]]
array([ 3, 10, 17, 24])
# 二维最终选出的数其实是 (0,3),(2,2),(4,1),(6,0)组成的一维数组

数组的转置

data = np.arange(15).reshape(3,5)
data
# 结果
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]]) data.T
array([[ 0, 5, 10],
[ 1, 6, 11],
[ 2, 7, 12],
[ 3, 8, 13],
[ 4, 9, 14]]) 行变成列或列变行

矩阵的內积,A*A^T

ret1 = np.dot(data,data.T)  3*5, 5*3 --- 3*3
ret1
array([[ 30, 80, 130], # 30 = (0*0 + 1*1 + 2*2 + 3*3 + 4*4)
[ 80, 255, 430],
[130, 430, 730]])
ret2 = np.dot(data.T,data) 5*3 , 3*5 --- 5*5 # 內积的正确方法
ret2
array([[125, 140, 155, 170, 185],
[140, 158, 176, 194, 212],
[155, 176, 197, 218, 239],
[170, 194, 218, 242, 266],
[185, 212, 239, 266, 293]])

高维数组的轴对换

data = np.arange(16).reshape((2,2,4))
data
# 结果
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]], [[ 8, 9, 10, 11],
[12, 13, 14, 15]]]) data.transpose((1,0,2))
data
# 结果
array([[[ 0, 1, 2, 3],
[ 8, 9, 10, 11]], [[ 4, 5, 6, 7],
[12, 13, 14, 15]]]) 解析:其中正确的应该是(0,1,2)分别表示(x,y,z)(1,0,2)表明x轴和y轴进行了调换 那么导致索引值变化:
data[0,0] --->data[0,0]
data[0,1] --->data[1,0]
data[1,0] --->data[0,1]
data[1,1] --->data[1,1] data.transpose((2,1,0)) 表示x轴和z轴进行了变换。
x轴和z后就牵扯到结构的变化和,原来的结构是2*2*4--二行二维数组,每个二维数组里面有两行一维数组,每个一维数组里面有四行数据。 (2,2, 4) 的结构变成了 (4, 2, 2) [
[[],[]],
[[],[]],
[[],[]],
[[],[]], ] 结构变化后,然后开始赋值,data[0][1][1] = 5变成了 data[1][1][0] = 5 [
[[],[]],
[[],[5]],
[[],[]],
[[],[]], ]
原来的data[1][1][0] = 12 变成了 data[0][1][1] = 12 [
[[],[12]],
[[],[5]],
[[],[]],
[[],[]],
]
以此类推的出变化后的值 array([[[ 0, 1],
[ 2, 3]], [[ 4, 5],
[ 6, 7]], [[ 8, 9],
[10, 11]], [[12, 13],
[14, 15]]]) 总结:和Z轴相关的变换都需换换结构,然后在改变索引值。

swapaxes的轴对换:简写模式  swapaxes(1,2)  就是y轴和z轴进行变换。data[0][1][0]的值就变成data[0][0][1]的值

data = np.arange(,).reshape(,,)
data
# 结果
array([[[ , , , ],
[ , , , ]], [[ , , , ],
[, , , ]]]) data.swapaxes(,)
# 结果
array([[[ , ],
[ , ],
[ , ],
[ , ]], [[ , ],
[ , ],
[, ],
[, ]]]) 第一步,shape(,,)经过y轴和z轴的变换,形状变成shape(,,)---变形状 【[[],
[],
[],
[]],
[[],
[],
[],
[]]】 第二步,值变换,data[][][]的值变成data[][][]的值,经过所有的值变换,得到结果---变值

总结:轴变换的步骤,先根据函数(参数)变形状,然后变值

2.通用函数:快速的元素级数组函数

  就是对ndarray的数据进行元素级 操作的函数,接收一个或多个标量值,并返回一个或多个标量值。ufunc

sqrt函数  对每个元素进行二次开方操作 二次根号下

data = np.arange(,)
data
# 结果
array([ , , , , , , , , , , , , , , , ]) np.sqrt(data)
# 结果
array([. , . , 1.41421356, 1.73205081, . ,
2.23606798, 2.44948974, 2.64575131, 2.82842712, . ,
3.16227766, 3.31662479, 3.46410162, 3.60555128, 3.74165739,
3.87298335])

exp函数:exp,高等数学里以自然常数e为底的指数函数;Exp:返回e的n次方,e是一个常数为2.71828;Exp 函数 返回 e(自然对数的底)的幂次方。

np.exp(data)
# 结果
array([1.00000000e+00, 2.71828183e+00, 7.38905610e+00, 2.00855369e+01,
5.45981500e+01, 1.48413159e+02, 4.03428793e+02, 1.09663316e+03,
2.98095799e+03, 8.10308393e+03, 2.20264658e+04, 5.98741417e+04,
1.62754791e+05, 4.42413392e+05, 1.20260428e+06, 3.26901737e+06])

二元ufunc:接收两个数组参数

x = np.random.randn(8)
x
# 结果
array([-2.15378687, 0.81808891, 1.03173227, -1.38834899, -0.25440583,
0.15042907, 0.78186255, -1.56663501]) y = np.random.randn(8)
y
# 结果
array([ 0.99923527, -0.05346302, 0.36369126, -1.14881998, 1.13355945,
0.37692407, -0.00560708, 0.24598121]) np.maximum(x,y)
# 结果
array([ 0.99923527, -0.05346302, 0.36369126, 1.50986447, 1.32350916,
0.37692407, 0.13424535, 0.44801383])

# 函数方面未整理完全--TODO

3.利用数据进行数据处理

  一般处理数组,需要循环数组,对每个元素进行处理,但是数组表达式可以代替循环的做法

例如:在一组值(网格型)上计算函数sqrt(x^2 + y^2)。np.meshgrid函数接收两个一维数组,并产生两个二维矩阵(对应连个数组中的所有(x,y)对):

import numpy as np
points = np.arange(-5,5,0.01)
points
# 结果
array([-5.0000000e+00, -4.9900000e+00, -4.9800000e+00, -4.9700000e+00,
-4.9600000e+00, -4.9500000e+00, -4.9400000e+00, -4.9300000e+00,
-4.9200000e+00, -4.9100000e+00, -4.9000000e+00, -4.8900000e+00,
-4.8800000e+00, -4.8700000e+00, -4.8600000e+00, -4.8500000e+00,
-4.8400000e+00, -4.8300000e+00, -4.8200000e+00, -4.8100000e+00,
-4.8000000e+00, -4.7900000e+00, -4.7800000e+00, -4.7700000e+00,
-4.7600000e+00, -4.7500000e+00, -4.7400000e+00, -4.7300000e+00,
-4.7200000e+00, -4.7100000e+00, -4.7000000e+00, -4.6900000e+00,
-4.6800000e+00, -4.6700000e+00, -4.6600000e+00, -4.6500000e+00,
-4.6400000e+00, -4.6300000e+00, -4.6200000e+00, -4.6100000e+00,
-4.6000000e+00, -4.5900000e+00, -4.5800000e+00, -4.5700000e+00,
-4.5600000e+00, -4.5500000e+00, -4.5400000e+00, -4.5300000e+00,
-4.5200000e+00, -4.5100000e+00, -4.5000000e+00, -4.4900000e+00,
-4.4800000e+00, -4.4700000e+00, -4.4600000e+00, -4.4500000e+00,
-4.4400000e+00, -4.4300000e+00, -4.4200000e+00, -4.4100000e+00,
-4.4000000e+00, -4.3900000e+00, -4.3800000e+00, -4.3700000e+00,
-4.3600000e+00, -4.3500000e+00, -4.3400000e+00, -4.3300000e+00,
-4.3200000e+00, -4.3100000e+00, -4.3000000e+00, -4.2900000e+00,
-4.2800000e+00, -4.2700000e+00, -4.2600000e+00, -4.2500000e+00,
-4.2400000e+00, -4.2300000e+00, -4.2200000e+00, -4.2100000e+00,
-4.2000000e+00, -4.1900000e+00, -4.1800000e+00, -4.1700000e+00,
-4.1600000e+00, -4.1500000e+00, -4.1400000e+00, -4.1300000e+00,
-4.1200000e+00, -4.1100000e+00, -4.1000000e+00, -4.0900000e+00,
-4.0800000e+00, -4.0700000e+00, -4.0600000e+00, -4.0500000e+00,
-4.0400000e+00, -4.0300000e+00, -4.0200000e+00, -4.0100000e+00,
-4.0000000e+00, -3.9900000e+00, -3.9800000e+00, -3.9700000e+00,
-3.9600000e+00, -3.9500000e+00, -3.9400000e+00, -3.9300000e+00,
-3.9200000e+00, -3.9100000e+00, -3.9000000e+00, -3.8900000e+00,
-3.8800000e+00, -3.8700000e+00, -3.8600000e+00, -3.8500000e+00,
-3.8400000e+00, -3.8300000e+00, -3.8200000e+00, -3.8100000e+00,
-3.8000000e+00, -3.7900000e+00, -3.7800000e+00, -3.7700000e+00,
-3.7600000e+00, -3.7500000e+00, -3.7400000e+00, -3.7300000e+00,
-3.7200000e+00, -3.7100000e+00, -3.7000000e+00, -3.6900000e+00,
-3.6800000e+00, -3.6700000e+00, -3.6600000e+00, -3.6500000e+00,
-3.6400000e+00, -3.6300000e+00, -3.6200000e+00, -3.6100000e+00,
-3.6000000e+00, -3.5900000e+00, -3.5800000e+00, -3.5700000e+00,
-3.5600000e+00, -3.5500000e+00, -3.5400000e+00, -3.5300000e+00,
-3.5200000e+00, -3.5100000e+00, -3.5000000e+00, -3.4900000e+00,
-3.4800000e+00, -3.4700000e+00, -3.4600000e+00, -3.4500000e+00,
-3.4400000e+00, -3.4300000e+00, -3.4200000e+00, -3.4100000e+00,
-3.4000000e+00, -3.3900000e+00, -3.3800000e+00, -3.3700000e+00,
-3.3600000e+00, -3.3500000e+00, -3.3400000e+00, -3.3300000e+00,
-3.3200000e+00, -3.3100000e+00, -3.3000000e+00, -3.2900000e+00,
-3.2800000e+00, -3.2700000e+00, -3.2600000e+00, -3.2500000e+00,
-3.2400000e+00, -3.2300000e+00, -3.2200000e+00, -3.2100000e+00,
-3.2000000e+00, -3.1900000e+00, -3.1800000e+00, -3.1700000e+00,
-3.1600000e+00, -3.1500000e+00, -3.1400000e+00, -3.1300000e+00,
-3.1200000e+00, -3.1100000e+00, -3.1000000e+00, -3.0900000e+00,
-3.0800000e+00, -3.0700000e+00, -3.0600000e+00, -3.0500000e+00,
-3.0400000e+00, -3.0300000e+00, -3.0200000e+00, -3.0100000e+00,
-3.0000000e+00, -2.9900000e+00, -2.9800000e+00, -2.9700000e+00,
-2.9600000e+00, -2.9500000e+00, -2.9400000e+00, -2.9300000e+00,
-2.9200000e+00, -2.9100000e+00, -2.9000000e+00, -2.8900000e+00,
-2.8800000e+00, -2.8700000e+00, -2.8600000e+00, -2.8500000e+00,
-2.8400000e+00, -2.8300000e+00, -2.8200000e+00, -2.8100000e+00,
-2.8000000e+00, -2.7900000e+00, -2.7800000e+00, -2.7700000e+00,
-2.7600000e+00, -2.7500000e+00, -2.7400000e+00, -2.7300000e+00,
-2.7200000e+00, -2.7100000e+00, -2.7000000e+00, -2.6900000e+00,
-2.6800000e+00, -2.6700000e+00, -2.6600000e+00, -2.6500000e+00,
-2.6400000e+00, -2.6300000e+00, -2.6200000e+00, -2.6100000e+00,
-2.6000000e+00, -2.5900000e+00, -2.5800000e+00, -2.5700000e+00,
-2.5600000e+00, -2.5500000e+00, -2.5400000e+00, -2.5300000e+00,
-2.5200000e+00, -2.5100000e+00, -2.5000000e+00, -2.4900000e+00,
-2.4800000e+00, -2.4700000e+00, -2.4600000e+00, -2.4500000e+00,
-2.4400000e+00, -2.4300000e+00, -2.4200000e+00, -2.4100000e+00,
-2.4000000e+00, -2.3900000e+00, -2.3800000e+00, -2.3700000e+00,
-2.3600000e+00, -2.3500000e+00, -2.3400000e+00, -2.3300000e+00,
-2.3200000e+00, -2.3100000e+00, -2.3000000e+00, -2.2900000e+00,
-2.2800000e+00, -2.2700000e+00, -2.2600000e+00, -2.2500000e+00,
-2.2400000e+00, -2.2300000e+00, -2.2200000e+00, -2.2100000e+00,
-2.2000000e+00, -2.1900000e+00, -2.1800000e+00, -2.1700000e+00,
-2.1600000e+00, -2.1500000e+00, -2.1400000e+00, -2.1300000e+00,
-2.1200000e+00, -2.1100000e+00, -2.1000000e+00, -2.0900000e+00,
-2.0800000e+00, -2.0700000e+00, -2.0600000e+00, -2.0500000e+00,
-2.0400000e+00, -2.0300000e+00, -2.0200000e+00, -2.0100000e+00,
-2.0000000e+00, -1.9900000e+00, -1.9800000e+00, -1.9700000e+00,
-1.9600000e+00, -1.9500000e+00, -1.9400000e+00, -1.9300000e+00,
-1.9200000e+00, -1.9100000e+00, -1.9000000e+00, -1.8900000e+00,
-1.8800000e+00, -1.8700000e+00, -1.8600000e+00, -1.8500000e+00,
-1.8400000e+00, -1.8300000e+00, -1.8200000e+00, -1.8100000e+00,
-1.8000000e+00, -1.7900000e+00, -1.7800000e+00, -1.7700000e+00,
-1.7600000e+00, -1.7500000e+00, -1.7400000e+00, -1.7300000e+00,
-1.7200000e+00, -1.7100000e+00, -1.7000000e+00, -1.6900000e+00,
-1.6800000e+00, -1.6700000e+00, -1.6600000e+00, -1.6500000e+00,
-1.6400000e+00, -1.6300000e+00, -1.6200000e+00, -1.6100000e+00,
-1.6000000e+00, -1.5900000e+00, -1.5800000e+00, -1.5700000e+00,
-1.5600000e+00, -1.5500000e+00, -1.5400000e+00, -1.5300000e+00,
-1.5200000e+00, -1.5100000e+00, -1.5000000e+00, -1.4900000e+00,
-1.4800000e+00, -1.4700000e+00, -1.4600000e+00, -1.4500000e+00,
-1.4400000e+00, -1.4300000e+00, -1.4200000e+00, -1.4100000e+00,
-1.4000000e+00, -1.3900000e+00, -1.3800000e+00, -1.3700000e+00,
-1.3600000e+00, -1.3500000e+00, -1.3400000e+00, -1.3300000e+00,
-1.3200000e+00, -1.3100000e+00, -1.3000000e+00, -1.2900000e+00,
-1.2800000e+00, -1.2700000e+00, -1.2600000e+00, -1.2500000e+00,
-1.2400000e+00, -1.2300000e+00, -1.2200000e+00, -1.2100000e+00,
-1.2000000e+00, -1.1900000e+00, -1.1800000e+00, -1.1700000e+00,
-1.1600000e+00, -1.1500000e+00, -1.1400000e+00, -1.1300000e+00,
-1.1200000e+00, -1.1100000e+00, -1.1000000e+00, -1.0900000e+00,
-1.0800000e+00, -1.0700000e+00, -1.0600000e+00, -1.0500000e+00,
-1.0400000e+00, -1.0300000e+00, -1.0200000e+00, -1.0100000e+00,
-1.0000000e+00, -9.9000000e-01, -9.8000000e-01, -9.7000000e-01,
-9.6000000e-01, -9.5000000e-01, -9.4000000e-01, -9.3000000e-01,
-9.2000000e-01, -9.1000000e-01, -9.0000000e-01, -8.9000000e-01,
-8.8000000e-01, -8.7000000e-01, -8.6000000e-01, -8.5000000e-01,
-8.4000000e-01, -8.3000000e-01, -8.2000000e-01, -8.1000000e-01,
-8.0000000e-01, -7.9000000e-01, -7.8000000e-01, -7.7000000e-01,
-7.6000000e-01, -7.5000000e-01, -7.4000000e-01, -7.3000000e-01,
-7.2000000e-01, -7.1000000e-01, -7.0000000e-01, -6.9000000e-01,
-6.8000000e-01, -6.7000000e-01, -6.6000000e-01, -6.5000000e-01,
-6.4000000e-01, -6.3000000e-01, -6.2000000e-01, -6.1000000e-01,
-6.0000000e-01, -5.9000000e-01, -5.8000000e-01, -5.7000000e-01,
-5.6000000e-01, -5.5000000e-01, -5.4000000e-01, -5.3000000e-01,
-5.2000000e-01, -5.1000000e-01, -5.0000000e-01, -4.9000000e-01,
-4.8000000e-01, -4.7000000e-01, -4.6000000e-01, -4.5000000e-01,
-4.4000000e-01, -4.3000000e-01, -4.2000000e-01, -4.1000000e-01,
-4.0000000e-01, -3.9000000e-01, -3.8000000e-01, -3.7000000e-01,
-3.6000000e-01, -3.5000000e-01, -3.4000000e-01, -3.3000000e-01,
-3.2000000e-01, -3.1000000e-01, -3.0000000e-01, -2.9000000e-01,
-2.8000000e-01, -2.7000000e-01, -2.6000000e-01, -2.5000000e-01,
-2.4000000e-01, -2.3000000e-01, -2.2000000e-01, -2.1000000e-01,
-2.0000000e-01, -1.9000000e-01, -1.8000000e-01, -1.7000000e-01,
-1.6000000e-01, -1.5000000e-01, -1.4000000e-01, -1.3000000e-01,
-1.2000000e-01, -1.1000000e-01, -1.0000000e-01, -9.0000000e-02,
-8.0000000e-02, -7.0000000e-02, -6.0000000e-02, -5.0000000e-02,
-4.0000000e-02, -3.0000000e-02, -2.0000000e-02, -1.0000000e-02,
-1.0658141e-13, 1.0000000e-02, 2.0000000e-02, 3.0000000e-02,
4.0000000e-02, 5.0000000e-02, 6.0000000e-02, 7.0000000e-02,
8.0000000e-02, 9.0000000e-02, 1.0000000e-01, 1.1000000e-01,
1.2000000e-01, 1.3000000e-01, 1.4000000e-01, 1.5000000e-01,
1.6000000e-01, 1.7000000e-01, 1.8000000e-01, 1.9000000e-01,
2.0000000e-01, 2.1000000e-01, 2.2000000e-01, 2.3000000e-01,
2.4000000e-01, 2.5000000e-01, 2.6000000e-01, 2.7000000e-01,
2.8000000e-01, 2.9000000e-01, 3.0000000e-01, 3.1000000e-01,
3.2000000e-01, 3.3000000e-01, 3.4000000e-01, 3.5000000e-01,
3.6000000e-01, 3.7000000e-01, 3.8000000e-01, 3.9000000e-01,
4.0000000e-01, 4.1000000e-01, 4.2000000e-01, 4.3000000e-01,
4.4000000e-01, 4.5000000e-01, 4.6000000e-01, 4.7000000e-01,
4.8000000e-01, 4.9000000e-01, 5.0000000e-01, 5.1000000e-01,
5.2000000e-01, 5.3000000e-01, 5.4000000e-01, 5.5000000e-01,
5.6000000e-01, 5.7000000e-01, 5.8000000e-01, 5.9000000e-01,
6.0000000e-01, 6.1000000e-01, 6.2000000e-01, 6.3000000e-01,
6.4000000e-01, 6.5000000e-01, 6.6000000e-01, 6.7000000e-01,
6.8000000e-01, 6.9000000e-01, 7.0000000e-01, 7.1000000e-01,
7.2000000e-01, 7.3000000e-01, 7.4000000e-01, 7.5000000e-01,
7.6000000e-01, 7.7000000e-01, 7.8000000e-01, 7.9000000e-01,
8.0000000e-01, 8.1000000e-01, 8.2000000e-01, 8.3000000e-01,
8.4000000e-01, 8.5000000e-01, 8.6000000e-01, 8.7000000e-01,
8.8000000e-01, 8.9000000e-01, 9.0000000e-01, 9.1000000e-01,
9.2000000e-01, 9.3000000e-01, 9.4000000e-01, 9.5000000e-01,
9.6000000e-01, 9.7000000e-01, 9.8000000e-01, 9.9000000e-01,
1.0000000e+00, 1.0100000e+00, 1.0200000e+00, 1.0300000e+00,
1.0400000e+00, 1.0500000e+00, 1.0600000e+00, 1.0700000e+00,
1.0800000e+00, 1.0900000e+00, 1.1000000e+00, 1.1100000e+00,
1.1200000e+00, 1.1300000e+00, 1.1400000e+00, 1.1500000e+00,
1.1600000e+00, 1.1700000e+00, 1.1800000e+00, 1.1900000e+00,
1.2000000e+00, 1.2100000e+00, 1.2200000e+00, 1.2300000e+00,
1.2400000e+00, 1.2500000e+00, 1.2600000e+00, 1.2700000e+00,
1.2800000e+00, 1.2900000e+00, 1.3000000e+00, 1.3100000e+00,
1.3200000e+00, 1.3300000e+00, 1.3400000e+00, 1.3500000e+00,
1.3600000e+00, 1.3700000e+00, 1.3800000e+00, 1.3900000e+00,
1.4000000e+00, 1.4100000e+00, 1.4200000e+00, 1.4300000e+00,
1.4400000e+00, 1.4500000e+00, 1.4600000e+00, 1.4700000e+00,
1.4800000e+00, 1.4900000e+00, 1.5000000e+00, 1.5100000e+00,
1.5200000e+00, 1.5300000e+00, 1.5400000e+00, 1.5500000e+00,
1.5600000e+00, 1.5700000e+00, 1.5800000e+00, 1.5900000e+00,
1.6000000e+00, 1.6100000e+00, 1.6200000e+00, 1.6300000e+00,
1.6400000e+00, 1.6500000e+00, 1.6600000e+00, 1.6700000e+00,
1.6800000e+00, 1.6900000e+00, 1.7000000e+00, 1.7100000e+00,
1.7200000e+00, 1.7300000e+00, 1.7400000e+00, 1.7500000e+00,
1.7600000e+00, 1.7700000e+00, 1.7800000e+00, 1.7900000e+00,
1.8000000e+00, 1.8100000e+00, 1.8200000e+00, 1.8300000e+00,
1.8400000e+00, 1.8500000e+00, 1.8600000e+00, 1.8700000e+00,
1.8800000e+00, 1.8900000e+00, 1.9000000e+00, 1.9100000e+00,
1.9200000e+00, 1.9300000e+00, 1.9400000e+00, 1.9500000e+00,
1.9600000e+00, 1.9700000e+00, 1.9800000e+00, 1.9900000e+00,
2.0000000e+00, 2.0100000e+00, 2.0200000e+00, 2.0300000e+00,
2.0400000e+00, 2.0500000e+00, 2.0600000e+00, 2.0700000e+00,
2.0800000e+00, 2.0900000e+00, 2.1000000e+00, 2.1100000e+00,
2.1200000e+00, 2.1300000e+00, 2.1400000e+00, 2.1500000e+00,
2.1600000e+00, 2.1700000e+00, 2.1800000e+00, 2.1900000e+00,
2.2000000e+00, 2.2100000e+00, 2.2200000e+00, 2.2300000e+00,
2.2400000e+00, 2.2500000e+00, 2.2600000e+00, 2.2700000e+00,
2.2800000e+00, 2.2900000e+00, 2.3000000e+00, 2.3100000e+00,
2.3200000e+00, 2.3300000e+00, 2.3400000e+00, 2.3500000e+00,
2.3600000e+00, 2.3700000e+00, 2.3800000e+00, 2.3900000e+00,
2.4000000e+00, 2.4100000e+00, 2.4200000e+00, 2.4300000e+00,
2.4400000e+00, 2.4500000e+00, 2.4600000e+00, 2.4700000e+00,
2.4800000e+00, 2.4900000e+00, 2.5000000e+00, 2.5100000e+00,
2.5200000e+00, 2.5300000e+00, 2.5400000e+00, 2.5500000e+00,
2.5600000e+00, 2.5700000e+00, 2.5800000e+00, 2.5900000e+00,
2.6000000e+00, 2.6100000e+00, 2.6200000e+00, 2.6300000e+00,
2.6400000e+00, 2.6500000e+00, 2.6600000e+00, 2.6700000e+00,
2.6800000e+00, 2.6900000e+00, 2.7000000e+00, 2.7100000e+00,
2.7200000e+00, 2.7300000e+00, 2.7400000e+00, 2.7500000e+00,
2.7600000e+00, 2.7700000e+00, 2.7800000e+00, 2.7900000e+00,
2.8000000e+00, 2.8100000e+00, 2.8200000e+00, 2.8300000e+00,
2.8400000e+00, 2.8500000e+00, 2.8600000e+00, 2.8700000e+00,
2.8800000e+00, 2.8900000e+00, 2.9000000e+00, 2.9100000e+00,
2.9200000e+00, 2.9300000e+00, 2.9400000e+00, 2.9500000e+00,
2.9600000e+00, 2.9700000e+00, 2.9800000e+00, 2.9900000e+00,
3.0000000e+00, 3.0100000e+00, 3.0200000e+00, 3.0300000e+00,
3.0400000e+00, 3.0500000e+00, 3.0600000e+00, 3.0700000e+00,
3.0800000e+00, 3.0900000e+00, 3.1000000e+00, 3.1100000e+00,
3.1200000e+00, 3.1300000e+00, 3.1400000e+00, 3.1500000e+00,
3.1600000e+00, 3.1700000e+00, 3.1800000e+00, 3.1900000e+00,
3.2000000e+00, 3.2100000e+00, 3.2200000e+00, 3.2300000e+00,
3.2400000e+00, 3.2500000e+00, 3.2600000e+00, 3.2700000e+00,
3.2800000e+00, 3.2900000e+00, 3.3000000e+00, 3.3100000e+00,
3.3200000e+00, 3.3300000e+00, 3.3400000e+00, 3.3500000e+00,
3.3600000e+00, 3.3700000e+00, 3.3800000e+00, 3.3900000e+00,
3.4000000e+00, 3.4100000e+00, 3.4200000e+00, 3.4300000e+00,
3.4400000e+00, 3.4500000e+00, 3.4600000e+00, 3.4700000e+00,
3.4800000e+00, 3.4900000e+00, 3.5000000e+00, 3.5100000e+00,
3.5200000e+00, 3.5300000e+00, 3.5400000e+00, 3.5500000e+00,
3.5600000e+00, 3.5700000e+00, 3.5800000e+00, 3.5900000e+00,
3.6000000e+00, 3.6100000e+00, 3.6200000e+00, 3.6300000e+00,
3.6400000e+00, 3.6500000e+00, 3.6600000e+00, 3.6700000e+00,
3.6800000e+00, 3.6900000e+00, 3.7000000e+00, 3.7100000e+00,
3.7200000e+00, 3.7300000e+00, 3.7400000e+00, 3.7500000e+00,
3.7600000e+00, 3.7700000e+00, 3.7800000e+00, 3.7900000e+00,
3.8000000e+00, 3.8100000e+00, 3.8200000e+00, 3.8300000e+00,
3.8400000e+00, 3.8500000e+00, 3.8600000e+00, 3.8700000e+00,
3.8800000e+00, 3.8900000e+00, 3.9000000e+00, 3.9100000e+00,
3.9200000e+00, 3.9300000e+00, 3.9400000e+00, 3.9500000e+00,
3.9600000e+00, 3.9700000e+00, 3.9800000e+00, 3.9900000e+00,
4.0000000e+00, 4.0100000e+00, 4.0200000e+00, 4.0300000e+00,
4.0400000e+00, 4.0500000e+00, 4.0600000e+00, 4.0700000e+00,
4.0800000e+00, 4.0900000e+00, 4.1000000e+00, 4.1100000e+00,
4.1200000e+00, 4.1300000e+00, 4.1400000e+00, 4.1500000e+00,
4.1600000e+00, 4.1700000e+00, 4.1800000e+00, 4.1900000e+00,
4.2000000e+00, 4.2100000e+00, 4.2200000e+00, 4.2300000e+00,
4.2400000e+00, 4.2500000e+00, 4.2600000e+00, 4.2700000e+00,
4.2800000e+00, 4.2900000e+00, 4.3000000e+00, 4.3100000e+00,
4.3200000e+00, 4.3300000e+00, 4.3400000e+00, 4.3500000e+00,
4.3600000e+00, 4.3700000e+00, 4.3800000e+00, 4.3900000e+00,
4.4000000e+00, 4.4100000e+00, 4.4200000e+00, 4.4300000e+00,
4.4400000e+00, 4.4500000e+00, 4.4600000e+00, 4.4700000e+00,
4.4800000e+00, 4.4900000e+00, 4.5000000e+00, 4.5100000e+00,
4.5200000e+00, 4.5300000e+00, 4.5400000e+00, 4.5500000e+00,
4.5600000e+00, 4.5700000e+00, 4.5800000e+00, 4.5900000e+00,
4.6000000e+00, 4.6100000e+00, 4.6200000e+00, 4.6300000e+00,
4.6400000e+00, 4.6500000e+00, 4.6600000e+00, 4.6700000e+00,
4.6800000e+00, 4.6900000e+00, 4.7000000e+00, 4.7100000e+00,
4.7200000e+00, 4.7300000e+00, 4.7400000e+00, 4.7500000e+00,
4.7600000e+00, 4.7700000e+00, 4.7800000e+00, 4.7900000e+00,
4.8000000e+00, 4.8100000e+00, 4.8200000e+00, 4.8300000e+00,
4.8400000e+00, 4.8500000e+00, 4.8600000e+00, 4.8700000e+00,
4.8800000e+00, 4.8900000e+00, 4.9000000e+00, 4.9100000e+00,
4.9200000e+00, 4.9300000e+00, 4.9400000e+00, 4.9500000e+00,
4.9600000e+00, 4.9700000e+00, 4.9800000e+00, 4.9900000e+00]) x,y = np.meshgrid(points,points)
x
# 结果
array([[-5. , -4.99, -4.98, ..., 4.97, 4.98, 4.99],
[-5. , -4.99, -4.98, ..., 4.97, 4.98, 4.99],
[-5. , -4.99, -4.98, ..., 4.97, 4.98, 4.99],
...,
[-5. , -4.99, -4.98, ..., 4.97, 4.98, 4.99],
[-5. , -4.99, -4.98, ..., 4.97, 4.98, 4.99],
[-5. , -4.99, -4.98, ..., 4.97, 4.98, 4.99]]) z = np.sqrt(x ** 2 + y ** 2)
z
# 结果
array([[7.07106781, 7.06400028, 7.05693985, ..., 7.04988652, 7.05693985,
7.06400028],
[7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815,
7.05692568],
[7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354,
7.04985815],
...,
[7.04988652, 7.04279774, 7.03571603, ..., 7.0286414 , 7.03571603,
7.04279774],
[7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354,
7.04985815],
[7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815,
7.05692568]]) import matplotlib.pyplot as plt
plt.imshow(z,cmap=plt.cm.gray)
plt.title("Image plot of $\sqrt{x^2 + y ^2}$")

将逻辑表达式转换为数组运算

xarray = np.array([1.1,1.2,1.3,1.4,1.5])
yarray = np.array([2.1,2.2,2.3,2.4,2.5])
cond = np.array([True,False,True,True,False])
# 根据cond的值来选xarray和yarray的值
result = [(x if c else y) for x,y,c in zip(xarray,yarray,cond)]
result
# 结果
[1.1, 2.2, 1.3, 1.4, 2.5]

np.where对上面的功能进行简写,但是上面的不能运用于多维数组

np.where(cond,xarray,yarray)
# 结果
array([1.1, 2.2, 1.3, 1.4, 2.5])

np.where的第二个和第三个参数不必是数组,也可以是标量,分析工作中,where通常用于根据另一个数组而产生一个新的数组,,假设有一个随机数据组成的矩阵,你希望将所有的正值替换为2,所有的负值替换为-2,利用np.where很好解决

data = np.random.randn(4,4)
data
# 结果
array([[-0.17893171, -1.27250145, -0.45939414, 0.30944654],
[ 0.35907625, -0.5218144 , 0.818055 , -0.41448322],
[-0.93634932, 0.98570265, -0.01616765, -0.56027282],
[-0.40607618, 1.39596637, 0.2368549 , 1.58591689]]) data > 0
# 结果
array([[False, False, False, True],
[ True, False, True, False],
[False, True, False, False],
[False, True, True, True]]) np.where(data>0,2,-2) True就是2,False就是-2 array([[-2, -2, -2, 2],
[ 2, -2, 2, -2],
[-2, 2, -2, -2],
[-2, 2, 2, 2]])

将数组中所有正数全部换成2:这种方式确实省去了循环数组进行改值,效率很高

np.where(data>0,2,data)
# 结果
array([[-0.17893171, -1.27250145, -0.45939414, 2. ],
[ 2. , -0.5218144 , 2. , -0.41448322],
[-0.93634932, 2. , -0.01616765, -0.56027282],
[-0.40607618, 2. , 2. , 2. ]])

数学和统计方法

  sum mean std等聚合计算

例如:随机生成一些符合正态分布的数据,然后进行聚类统计

data = np.random.randn(5,4)
data
# 结果
array([[-0.06079722, 1.49824203, -0.80957561, 0.02303306],
[-0.96135543, -0.99023163, -2.29943668, 0.02939615],
[-0.85931239, 0.55478495, 0.0246531 , -1.35531409],
[ 1.4930319 , -0.51001952, -0.47922101, 0.70338996],
[-1.14822113, 1.38053279, -0.61358326, -0.38187168]]) data.mean()
# 结果
-0.23809378534483533
np.mean(data)
# 结果
-0.23809378534483533
data.sum()
# 结果
-4.761875706896706
np.sum(data)
# 结果
-4.761875706896706
data.mean(axis=0) # axis = 0 表示跨行---即每一列
# 结果
array([-0.30733085, 0.38666172, -0.83543269, -0.19627332])
data.sum(axis=1) # axis = 1 表示跨列---即每一行
# 结果
array([ 0.65090226, -4.2216276 , -1.63518844, 1.20718134, -0.76314327])


  不管是mean和sum计算,最终的结果都是少一维的数组

一维的样本累加

data = np.array([1,2,3,4,5,6,7,8,9,10])
data
# array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
data.cumsum() # 功能是将样本逐渐累加
# 1 = 1;3 = 1 + 2;6 = 1 + 2 + 3;
array([ 1, 3, 6, 10, 15, 21, 28, 36, 45, 55], dtype=int32)

多维的样本累加

data = np.arange(1,10).reshape(3,3)
data
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]) data.cumsum()
# 结果
array([ 1, 3, 6, 10, 15, 21, 28, 36, 45], dtype=int32) # 全部累加
data.cumsum(axis=0) # 每列累加
# 结果
array([[ 1, 2, 3],
[ 5, 7, 9],
[12, 15, 18]], dtype=int32)
data.cumsum(axis=1) # 每行累加
# 结果
array([[ 1, 3, 6],
[ 4, 9, 15],
[ 7, 15, 24]], dtype=int32)

用于布尔型的数组方法

# TODO

数组排序

sort

一维数组排序

data = np.random.randn(5)
data
# 结果
array([-2.5325336 , -0.45898654, -0.35112763, -0.93824495, -0.6494557 ])
data.sort()
data
# 结果
array([-2.5325336 , -0.93824495, -0.6494557 , -0.45898654, -0.35112763])

2019-09-23-19:37:54

多维数组排序:sort

data = np.random.randn(5,3)
data
array([[-1.09656539, -1.44675032, -0.49202197],
[ 0.37282188, -0.24748695, 0.02384063],
[ 0.46740851, 1.10011835, 0.47564148],
[ 0.57882475, -2.20542035, 0.17290702],
[ 0.55513993, -0.35427358, -2.03757406]])
data.sort(0)
data
array([[-1.09656539, -2.20542035, -2.03757406],
[ 0.37282188, -1.44675032, -0.49202197],
[ 0.46740851, -0.35427358, 0.02384063],
[ 0.55513993, -0.24748695, 0.17290702],
[ 0.57882475, 1.10011835, 0.47564148]])
np.sort(data,axis=0)
data
array([[-1.09656539, -2.20542035, -2.03757406],
[ 0.37282188, -1.44675032, -0.49202197],
[ 0.46740851, -0.35427358, 0.02384063],
[ 0.55513993, -0.24748695, 0.17290702],
[ 0.57882475, 1.10011835, 0.47564148]])

axis = 1排序结果:

array([[ 0.16578703,  0.07492019, -0.97846794],
[-0.18209471, -0.41217471, -0.60299124],
[-1.72009426, -0.44879286, -1.6406782 ],
[ 1.7511948 , -0.20265756, 0.82688453],
[-0.47502325, -0.52784722, -1.52997592]]) np.sort(data,axis=1)
array([[-0.97846794, 0.07492019, 0.16578703],
[-0.60299124, -0.41217471, -0.18209471],
[-1.72009426, -1.6406782 , -0.44879286],
[-0.20265756, 0.82688453, 1.7511948 ],
[-1.52997592, -0.52784722, -0.47502325]])

# 数组进行排序后就已经更改了数组的结构,数组变成了排序好的结构

一维数组的唯一值查找方法:也可理解为去重

data = np.array([1,2,3,4,5,4,3,2,1,0])
data
array([1, 2, 3, 4, 5, 4, 3, 2, 1, 0])
np.unique(data) # 去重后并返回排序好的数组
array([0, 1, 2, 3, 4, 5])

成员是否在数组里面的判断方法

data = np.array([1,2,3,4,5,4,3,2,1,0])
data
array([1, 2, 3, 4, 5, 4, 3, 2, 1, 0])
ret = np.in1d(data,[3,4,5])
ret # 返回一个bool值的列表
array([False, False, False, False, False, True, True, True, True,
True])


数组文件的输入和输出

  numpy可以读取磁盘上的文本和二进制数据。np.save,np.load两个函数,默认下,数组是以未压缩的原始二进制格式保存在.npy的文件中。

a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.array([7,8,9]) np.savez("many",a=a,b=b,c=c) # 关键字参数传递参数 ret = np.load("many.npz")
# ret类似一个字典形式
ret
<numpy.lib.npyio.NpzFile at 0x5dda080>
ret['a']
array([1, 2, 3])

线性代数

  numpy提供了dot函数,用来让两个矩阵进行乘法,

x = np.array([[1,2,3],[4,5,6]])
y = np.array([[7,8],[9,10],[11,12]]) # 2*3 3 *2 ---- 2 * 2 ret = np.dot(x,y)
ret array([[ 58, 64],
[139, 154]])

二维矩阵 * 一维矩阵(大小合适)

x = np.array([[1,2,3],[4,5,6]])
y = np.array([7,8,9]) y
y.shape # 一维数组只有行,没有列 # 结果
(3,) 3 * 1 ret = np.dot(x,y) 2*3 * 3*1 = 2*1
ret
# 结果 array([ 50, 122])

矩阵的转置,矩阵的逆

data = np.random.randn(5,5)
data
array([[-0.66722861, -1.05166739, 0.50078389, 0.12101523, -1.79648742],
[ 1.39744908, 0.52359195, -1.72793681, 0.85379089, 1.31061423],
[-0.97876769, -0.45461206, 1.30106165, 1.24189733, 0.09226485],
[-0.05682579, -0.86258199, 0.15000168, 0.13101571, -0.83373897],
[-0.91637877, -0.7502237 , 0.19909396, 0.24339183, 1.89803093]])
from numpy.linalg import inv,qr
data_r = inv(data) # 矩阵的逆矩阵
data_r
array([[-1.76904786, -0.2303984 , 0.17920536, 2.35016865, -0.49167585],
[ 0.4604562 , 0.06423869, 0.12409186, -1.50670415, -0.27641049],
[-1.5185419 , -0.58246668, 0.4536423 , 1.57608382, -0.36483338],
[ 0.40719248, 0.45835402, 0.51499641, -0.38190467, -0.12388313],
[-0.56503165, -0.0835249 , 0.02194552, 0.42277667, 0.2343783 ]])
np.dot(data,data_r)
array([[ 1.00000000e+00, 6.43952042e-17, 6.35430438e-17,
-2.23554197e-16, -8.50732362e-17],
[ 4.93729662e-18, 1.00000000e+00, -5.08010725e-18,
3.01746183e-16, 1.16513398e-16],
[-3.28852246e-16, 1.57394623e-16, 1.00000000e+00,
2.13695858e-17, -6.72574187e-17],
[-3.73875165e-17, 2.04305881e-17, -1.55255260e-17,
1.00000000e+00, 8.39231877e-18],
[-4.56471514e-17, 1.45263310e-16, -1.80718066e-18,
-1.44115115e-16, 1.00000000e+00]])

伪随机数的生成

  标准正太分布的数据样本

# TODO

python数据分析第二版:numpy的更多相关文章

  1. python数据分析第二版:pandas

    一:pandas 两种数据结构:series和dataframe series:索引(索引自动生成)和标签(人为定义)组成---返回一个对象 obj = pd.Series([1,2,3,4]) ob ...

  2. python数据分析第二版:数据加载,存储和格式

    一:读取数据的函数 1.读取csv文件 import numpy as np import pandas as pd data = pd.read_csv("C:\\Users\\Admin ...

  3. 参考《利用Python进行数据分析(第二版)》高清中文PDF+高清英文PDF+源代码

    第2版针对Python 3.6进行全面修订和更新,涵盖新版的pandas.NumPy.IPython和Jupyter,并增加大量实际案例,可以帮助高效解决一系列数据分析问题. 第2版中的主要更新了Py ...

  4. 利用Python进行数据分析(第二版)电子版书籍分享

    资料下载地址: 链接:https://pan.baidu.com/s/1y1C0bJPkSn7Sv6Eq9G5_Ug 提取码:vscu <利用Python进行数据分析(第二版)>高清中文版 ...

  5. 小象学院Python数据分析第二期【升级版】

    点击了解更多Python课程>>> 小象学院Python数据分析第二期[升级版] 主讲老师: 梁斌 资深算法工程师 查尔斯特大学(Charles Sturt University)计 ...

  6. python数据分析三剑客之: Numpy

    数据分析三剑客之: Numpy 一丶Numpy的使用 ​ numpy 是Python语言的一个扩展程序库,支持大维度的数组和矩阵运算.也支持针对数组运算提供大量的数学函数库 创建ndarray # 1 ...

  7. python 数据分析工具之 numpy pandas matplotlib

    作为一个网络技术人员,机器学习是一种很有必要学习的技术,在这个数据爆炸的时代更是如此. python做数据分析,最常用以下几个库 numpy pandas matplotlib 一.Numpy库 为了 ...

  8. Python数据分析工具库-Numpy 数组支持库(一)

    1 Numpy数组 在Python中有类似数组功能的数据结构,比如list,但在数据量大时,list的运行速度便不尽如意,Numpy(Numerical Python)提供了真正的数组功能,以及对数据 ...

  9. Python数据分析工具库-Numpy 数组支持库(二)

    1 shape变化及转置 >>> a = np.floor(10*np.random.random((3,4))) >>> a array([[ 2., 8., 0 ...

随机推荐

  1. java 中创建线程有哪几种方式?

    Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行 ...

  2. fedora18 You might need to install dependency packages for libxcb.

    22 down vote The page Qt for X11 Requirements lists some packages required to build Qt on Debian. Th ...

  3. ORACLE DG临时表空间管理

    实施目标:由于磁盘空间不足,将主库的临时表空间修改位置 standby_file_management 管理方式:AUTO SQL> show parameter standby_file NA ...

  4. Oracle-buffer cache、shared pool

    http://blog.csdn.net/panfelix/article/details/38347059   buffer pool 和shared pool 详解 http://blog.csd ...

  5. Ffmpeg AAC 编码错误 Input contains (near) NaN/+-Inf

    Ffmpeg AAC编码 如果传入参Frame的Sample Format 为 AV_SAMPLE_FMT_S16,会出现 错误提示 Input contains (near) NaN/+-Inf,需 ...

  6. Learn Python the hard way, ex41 来自Percal 25 号星星的哥顿人

    我承认,我偷懒了,少打了大量代码(剧情),英文太差,下次可以编个中文的试试 #!/urs/bin/python #coding:utf-8 from sys import exit from rand ...

  7. 使用OkHttp模拟登陆LeetCode

    前言 网上有很多模拟登陆 LeetCode 的教程,但是基本都是使用 Python 来实现的.作为一个 Java 语言爱好者,因此想用 Java 来实现下.在实现的过程中,也遇到了一些坑点,故在此作为 ...

  8. NOPI导入导出EXCEL

    一.简介 1. 什么是NPOI NPOI,顾名思义,就是POI的.NET版本.那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office 97 ...

  9. JS和C#后台获取网站URL

    例:网页URL :  http://localhost:8086/index.aspx?topicId=361 1.设置或获取 href 属性中跟在问号后面的部分:window.location.se ...

  10. STL关联式容器之set\map ----以STL源码为例

    关联式容器的特征:所用元素都会根据元素的键值自动被排序. set STL 中的关联式容器低层数据结构为红黑树,其功能都是调用低层数据结构中提供的相应接口. set元的元素不会像map那样同时拥有键(k ...