1.对数组求指数和对数
参考
指数:
math.exp() 只能对一个数求指数,不能对数组进行批量求指数
numpy.exp()既能对一个数求指数,也能对数组进行批量求指数
对数:
math.log()
numpy.log()
作用同上
2.数组的最值及其索引
参考
在list列表中,max(list)可以得到list的最大值,list.index(max(list))可以得到最大值对应的索引
但在numpy中的array没有index方法,取而代之的是where,其又是list没有的
numpy中还有argmax/argmin方法来获取最值对应的索引,但是它返回顺序查找(行优先)下的索引,也就是没有分别的行和列,而且有相同最值情况下,它只返回第一个最值的索引。
首先我们可以得到array在全局和每行每列的最大值(最小值同理)
>>> a = np.arange(9).reshape((3,3))
>>> a
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> print(np.max(a)) #全局最大
8
>>> print(np.max(a,axis=0)) #每列最大
[6 7 8]
>>> print(np.max(a,axis=1)) #每行最大
[2 5 8]
然后用where得到最大值的索引,返回值中,前面的array对应行数,后者对应列数
>>> print(np.where(a==np.max(a)))
(array([2], dtype=int64), array([2], dtype=int64))
>>> print(np.where(a==np.max(a,axis=0)))
(array([2, 2, 2], dtype=int64), array([0, 1, 2], dtype=int64))
import numpy as np
r = np.array([[-1,2,-3]])
# 输出:2
a = np.argmin(r)
print(a)
# 输出:1
b = np.argmax(r)
print(b)
3.按照行或者列求均值/求和/最大值/最小值/标准差/方差
参考
import numpy as np
a = np.arange(12).reshape(3, 4)
print(a.shape)
print(a)
# (3, 4)
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
# 返回得到数组中所有元素的和
print(np.sum(a))
# 66
# 参数axis=0时,返回数组各列的和,参数axis=1时,返回数组各行的和。
print(np.sum(a, axis=0))
print(np.sum(a, axis=1))
# [12 15 18 21]
# [ 6 22 38]
# 不使用numpy的函数也是可以的,因为ndarndarray数组中也有相同的求和方法sum()。并且也可以通过参数axis指定行或列。
print(a.sum())
# 66
print(a.sum(axis=0))
print(a.sum(axis=1))
# [12 15 18 21]
# [ 6 22 38]
# numpy.mean()的使用方法与numpy.sum()相同,也可以通过参数axis指定行或列。
print(np.mean(a))
# 5.5
print(np.mean(a, axis=0))
print(np.mean(a, axis=1))
# [ 4. 5. 6. 7.]
# [ 1.5 5.5 9.5]
# 和sum()一样,ndarray数组中也有相同的求平均值的方法mean()。并且也可以通过参数axis指定行或列。
print(a.mean())
# 5.5
print(a.mean(axis=0))
print(a.mean(axis=1))
# [ 4. 5. 6. 7.]
# [ 1.5 5.5 9.5]
#在分别使用numpy.min()和numpy.max()求数组中元素的最小值与最大值的时候,也可以通过参数axis指定行或列。并且,为了使用方便,还可以直接使用函数numpy.amin()和numpy.amax()进行计算,所得到的结果是一样的。
print(np.min(a))
print(np.min(a, axis=0))
print (np.amin(a,0))
# 0
# [0 1 2 3]
# [0 1 2 3]
print(a.max())
print(a.max(axis=1))
print(np.amax(a,1))
# 11
# [ 3 7 11]
# [ 3 7 11]
# 求标准差和方差的函数分别为numpy.std()和numpy.var()。使用方法和之前相同,也可以通过参数axis指定行或列。
print(np.std(a))
#3.452052529534663
print(np.var(a))
#11.916666666666666
4.取对角线元素
a= np.array([[1,2],[0.5,3],[3,4]])
a.diagonal()
输出:
array([1., 3.])
5.取两个数组对应的最大或最小值
a = [1,2,3]
b = [1,3,1]
a = np.minimum(a,b)
a
输出:
array([1, 2, 1])
6.对数组重新排列
a = np.array([[1,2],[0.5,3],[3,4]])
b = [2, 1, 3]
c = np.argsort(b)
print(c)
bb = np.array(b)[c]
print(bb)
aa = np.array(a)[c]
print(aa)
输出:
[1 0 2]
[1 2 3]
[[0.5 3. ]
[1. 2. ]
[3. 4. ]]