numpy 数据处理

np.meshgrid()

meshgrid 传入两个一维数组,返回第一个二维数组用第一个传入的一维数组为行,第二个传入的一维数组为列
返回的第二个数组是以第二个传入的一维数组为行,第一个一维数组为列

import numpy as np
import matplotlib.pyplot as plt
import pylab
points = np.arange(-5,5,0.01)
#meshgrid 传入两个一维数组,返回第一个二维数组用第一个传入的一维数组为行,第二个传入的一维数组为列
#返回的第二个数组是以第二个传入的一维数组为行,第一个一维数组为列
xs,ys = np.meshgrid(points,points)
print(xs == ys.T)  #True

z = np.sqrt(ys**2 + xs**2)
plt.imshow(z,cmap= plt.cm.gray)
plt.colorbar()
pylab.show()

 

筛选

真值表

#真值表
import numpy as np
import numpy.random as np_random
x_arr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
y_arr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
cond = np.array([True, False, True, True, False])
result = [(x if c else y) for x, y, c in zip(x_arr, y_arr, cond)] # 通过列表推到实现
print(result)


 

where:掩码if筛选

#若where的第2、3个参数不是数组,则第2、3个参数将通过掩码组成掩码形状相同的数组
np.where(cond,x_arr,y_arr)
arr = np_random.randn(4,4)
print(arr)
print(np.where(arr>0,2,-2))

#where多条件

cond_1 = np.array([True, False, True, True, False])
cond_2 = np.array([False, True, False, True, False])
# 传统代码如下
result = []
for i in range(len(cond)):
    if cond_1[i] and cond_2[i]:
        result.append(0)
    elif cond_1[i]:
        result.append(1)
    elif cond_2[i]:
        result.append(2)
    else:
        result.append(3)
print(result)
result = np.where(cond_1 & cond_2, 0, \
                  np.where(cond_1, 1, np.where(cond_2, 2, 3)))

 

posted @ 2018-08-22 22:37  Python少年  阅读(230)  评论(0编辑  收藏  举报