numpy必知必会-第十一天

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

你可能感兴趣的:(numpy必知必会-第十一天)