numpy必知必会-第十一天
2019-05-05 本文已影响70人
人工智能人话翻译官
51 找到一个array中,每行上的最大值
例如构建array
np.random.seed(100)
data = np.random.randint(1,10, [5,3])
data
data内容如下:
array([[9, 9, 4],
[8, 8, 1],
[5, 3, 6],
[3, 3, 3],
[2, 1, 9]])
解决办法:
np.random.seed(100)
data = np.random.randint(1,10, [5,3])
np.amax(data, axis=1)
输出:
array([9, 8, 6, 3, 9])
52 通过自定义的函数,处理array中的元素
例如:
构建array
np.random.seed(100)
data = np.random.randint(1,10, [5,3])
data
内容如下:
array([[9, 9, 4],
[8, 8, 1],
[5, 3, 6],
[3, 3, 3],
[2, 1, 9]])
计算每行中的最大值与最小值的差值。
解决办法如下:
np.random.seed(100)
data = np.random.randint(1,10, [5,3])
np.apply_along_axis(lambda x: np.max(x)-np.min(x), arr=data, axis=1)
输出
array([5, 7, 3, 0, 8])
53 构建mask array,把一个array中的重复元素设置为True,第一次出现的元素设置为False
例如:
输入
np.random.seed(100)
a = np.random.randint(0, 5, 10)
print('Array: ', a)
输出
Array: [0 0 3 0 2 4 2 2 2 2]
可见除了第一个0,第一个3,第一个2,第一个4,其他的都是重复的元素。则我们最终想要的array应该是这个样子的:
[False True False True False False True True True True]
解决办法:
np.random.seed(100)
a = np.random.randint(0, 5, 10)
out = np.full(a.shape[0], True)
unique_positions = np.unique(a, return_index=True)[1]
out[unique_positions] = False
print(out)
输出
[False True False True False False True True True True]
要点解读:
out = np.full(a.shape[0], True)
构建一个全是True的array
array([ True, True, True, True, True, True, True, True, True,
True])
把array进行unique处理
np.unique(a, return_index=True)[1],返回不重复的元素位置array([0, 4, 2, 5])
最后out[unique_positions] = False 就是把out中的0,4,2,5位置赋值为False,也就是一个元素第一次出现的位置为False。这个out就是我们要寻找的mask array。
a[out]
输出
array([0, 0, 2, 2, 2, 2])
输出的就是a中重复的元素。
54 如何把一个array中所有nan值都丢弃掉
例如:
构建一个包含nan的array
data = np.array([1,2,3,np.nan,5,6,7,np.nan])
把其中的nan,剔除。
解决办法:
data = np.array([1,2,3,np.nan,5,6,7,np.nan])
data[~np.isnan(data)]
输出
array([1., 2., 3., 5., 6., 7.])
要点解读:
np.isnan(data)用来判断data中的每一个元素是否是nan,如果为nan则返回True。这样你将得到一个mask array,再通过前面的“~” 取反操作。
55 计算两个array的欧几里得距离。
例如:
构建两个array
a = np.array([1,2,3,4,5])
b = np.array([4,5,6,7,8])
计算a,b之间的欧几里得距离。
解决办法:
a,b 两个array其实就是两个向量。所以可以很方便的使用np.linalg.norm解决。
a = np.array([1,2,3,4,5])
b = np.array([4,5,6,7,8])
dist = np.linalg.norm(a-b)
dist
输出:
6.708203932499369