实验代码:
import numpy as np
a=np.arange(10)
a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a[::-1]
array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
a[::2]
array([0, 2, 4, 6, 8])
a[:5]
array([0, 1, 2, 3, 4])
二维数组中,各索引位置上的元素不再是标量,而是一维数组。
arr1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
arr1
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
arr1[0]
array([1, 2, 3])
arr1[1,2]
6
多维数组里,单个索引值返回的是一个纬度低一点的数组。
arr2=np.arange(36).reshape(6,6)
arr2
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, 32, 33, 34, 35]])
arr2[1]
array([ 6, 7, 8, 9, 10, 11])
arr2[:,3]
array([ 3, 9, 15, 21, 27, 33])
arr2[1:4,2:4]
array([[ 8, 9],
[14, 15],
[20, 21]])
arr2[::2,::2]
array([[ 0, 2, 4],
[12, 14, 16],
[24, 26, 28]])
a=np.arange(12)**2
i=np.array([1,1,3,8,5])
a
array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121],
dtype=int32)
a[i]
array([ 1, 1, 9, 64, 25], dtype=int32)
palette = np.array( [ [0,0,0],[255,0,0],[0,255,0],[0,0,255],[255,255,255]] ) image = np.array( [ [ 0, 1, 2, 0 ],[ 0, 3, 4, 0 ] ] ) palette
array([[ 0, 0, 0], [255, 0, 0], [ 0, 255, 0], [ 0, 0, 255], [255, 255, 255]])
image
array([[0, 1, 2, 0], [0, 3, 4, 0]])
palette[image]
array([[[ 0, 0, 0], [255, 0, 0], [ 0, 255, 0], [ 0, 0, 0]], [[ 0, 0, 0], [ 0, 0, 255], [255, 255, 255], [ 0, 0, 0]]])
a=np.arange(12).reshape(3,4) a
array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])
i=np.array([[0,1],[1,2]]) i
array([[0, 1], [1, 2]])
j=np.array([[2,1],[3,3]]) j
array([[2, 1], [3, 3]])
a[i,j]
array([[ 2, 5], [ 7, 11]])
data=np.sin(np.arange(20)).reshape(5,4) data
array([[ 0. , 0.84147098, 0.90929743, 0.14112001], [-0.7568025 , -0.95892427, -0.2794155 , 0.6569866 ], [ 0.98935825, 0.41211849, -0.54402111, -0.99999021], [-0.53657292, 0.42016704, 0.99060736, 0.65028784], [-0.28790332, -0.96139749, -0.75098725, 0.14987721]])
ind=data.argmax(axis=0) ind
array([2, 0, 3, 1], dtype=int64)
numpy.sin(x, /, out=None, *, where=True, casting=‘same_kind’, order=‘K’, dtype=None, subok=True[, signature, extobj]) =
三角正弦,元素方式。
参数:
x: : array_like
角度,以弧度(2 \pirad等于360度)。
out: : ndarray, None, 或 tuple of ndarray and None, 可选参数
结果存储的位置。如果提供,它必须具有输入广播到的形状。如果未提供或没有,则返回一个新分配的数组。元组(只能作为关键字参数)的长度必须等于输出的数量。
where: : array_like, 可选参数
此条件通过输入广播。在条件为True的位置,将out数组设置为ufunc结果。在其他地方,out数组将保留其原始值。请注意,如果通过默认创建未初始化的输出数组out=None,条件中为False的位置将保持未初始化状态。
**kwargs:
返回值:
y: : 数组
x的每个元素的正弦。如果x是标量,则这是标量。
np.sin(np.pi/2.)
1.0
布尔值索引指的是一个由布尔值组成的数组可以作为一个数组的索引,返回的数据为True值对应位置的值
a=np.arange(12).reshape(3,4) a
array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])
b=a>4 b
array([[False, False, False, False], [False, True, True, True], [ True, True, True, True]])
a[b]
array([ 5, 6, 7, 8, 9, 10, 11])
由上面的操作可以看出,数组切片是原始数组的视图,但是任何修改都会直接反映到原数组上:下面是对数组a本身进行修改,将满足b为True条件a的值改为0。
a[b]=0a
array([[0, 1, 2, 3], [4, 0, 0, 0], [0, 0, 0, 0]])
a=np.arange(12).reshape(3,4) a
array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])
b1=np.array([False,True,True]) b1
array([False, True, True])
b2=np.array([True,False,True,False]) b2
array([ True, False, True, False])
a[b1,:]
array([[ 4, 5, 6, 7], [ 8, 9, 10, 11]])
注意一维数组的长度必须和你想要切片的维度或轴的长度一致,在之前的例子中,b1是一个秩为1长度为三的数组(a的行数),b2(长度为4)与a的第二秩(列)相一致。
a=np.arange(1,11) a
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
b=np.array([1,4,6]) b
array([1, 4, 6])
np.take(a,b)
array([2, 5, 7])
x = np.arange(6).reshape(2,3) x
array([[0, 1, 2], [3, 4, 5]])
np.argwhere(x>1)
array([[0, 2], [1, 0], [1, 1], [1, 2]], dtype=int64)
np.extract([x>2],x)
array([3, 4, 5])
np.where(x>2)
(array([1, 1, 1], dtype=int64), array([0, 1, 2], dtype=int64))
a=np.array([2,3,4,5]) b=np.array([8,5,4]) c=np.array([5,4,6,8,3]) ax,bx,cx=np.ix_(a,b,c) ax
array([[[2]], [[3]], [[4]], [[5]]])
bx
array([[[8], [5], [4]]])
cx
array([[[5, 4, 6, 8, 3]]])
ax.shape,bx.shape,cx.shape
((4, 1, 1), (1, 3, 1), (1, 1, 5))
result=ax+bx*cxresult
array([[[42, 34, 50, 66, 26], [27, 22, 32, 42, 17], [22, 18, 26, 34, 14]], [[43, 35, 51, 67, 27], [28, 23, 33, 43, 18], [23, 19, 27, 35, 15]], [[44, 36, 52, 68, 28], [29, 24, 34, 44, 19], [24, 20, 28, 36, 16]], [[45, 37, 53, 69, 29], [30, 25, 35, 45, 20], [25, 21, 29, 37, 17]]])
result[3,2,4]
17
a[3]+b[2]*c[4]
17
a=np.array([[1,2,3],[4,5,6],[7,8,9]]) a
array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = a*2b
array([[ 2, 4, 6], [ 8, 10, 12], [14, 16, 18]])
np.hstack((a,b))
array([[ 1, 2, 3, 2, 4, 6], [ 4, 5, 6, 8, 10, 12], [ 7, 8, 9, 14, 16, 18]])
np.concatenate((a,b),axis=1)
array([[ 1, 2, 3, 2, 4, 6], [ 4, 5, 6, 8, 10, 12], [ 7, 8, 9, 14, 16, 18]])
np.vstack((a,b))
array([[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9], [ 2, 4, 6], [ 8, 10, 12], [14, 16, 18]])
np.concatenate((a,b),axis=0)
array([[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9], [ 2, 4, 6], [ 8, 10, 12], [14, 16, 18]])
np.dstack((a,b))
array([[[ 1, 2], [ 2, 4], [ 3, 6]], [[ 4, 8], [ 5, 10], [ 6, 12]], [[ 7, 14], [ 8, 16], [ 9, 18]]])
np.column_stack((a,b))
array([[ 1, 2, 3, 2, 4, 6], [ 4, 5, 6, 8, 10, 12], [ 7, 8, 9, 14, 16, 18]])
np.row_stack((a,b))
array([[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9], [ 2, 4, 6], [ 8, 10, 12], [14, 16, 18]])
a=np.array([[1,2,3],[4,5,6],[7,8,9]]) a
array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b=a*2 b
array([[ 2, 4, 6], [ 8, 10, 12], [14, 16, 18]])
np.hsplit(a,3)
[array([[1], [4], [7]]), array([[2], [5], [8]]), array([[3], [6], [9]])]
np.split(a,3,axis=1)
[array([[1], [4], [7]]), array([[2], [5], [8]]), array([[3], [6], [9]])]
np.vsplit(a,3)
[array([[1, 2, 3]]), array([[4, 5, 6]]), array([[7, 8, 9]])]
np.split(a,3,axis=0)
[array([[1, 2, 3]]), array([[4, 5, 6]]), array([[7, 8, 9]])]
a=np.array([1,2,3]) a
array([1, 2, 3])
a.tolist()
[1, 2, 3]
x=np.arange(0,100,10,dtype=np.float64) a = np.sin(x) a
array([ 0. , -0.54402111, 0.91294525, -0.98803162, 0.74511316, -0.26237485, -0.30481062, 0.77389068, -0.99388865, 0.89399666])
b=np.arange(1,10).reshape(3,3) b
array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
np.cos(b)
array([[ 0.54030231, -0.41614684, -0.9899925 ], [-0.65364362, 0.28366219, 0.96017029], [ 0.75390225, -0.14550003, -0.91113026]])
np.round(_)
array([[ 1., -0., -1.], [-1., 0., 1.], [ 1., -0., -1.]])
x=np.random.rand(10)*10 x
array([2.2612299 , 7.20131365, 2.3055456 , 5.76279063, 4.11797351, 9.352511 , 7.26407455, 8.99025374, 0.01119493, 2.62834008])
np.floor(x)
array([2., 7., 2., 5., 4., 9., 7., 8., 0., 2.])
np.ceil(x)
array([ 3., 8., 3., 6., 5., 10., 8., 9., 1., 3.])
np.absolute(-3)
3
np.absolute(3+4j)
5.0
np.isnan(np.NAN)
True
np.log2(8)
3.0
np.sqrt(range(10))
array([0. , 1. , 1.41421356, 1.73205081, 2. , 2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ])
a=np.array([1,2,6,3,4,5,8]) np.mean(a)
4.142857142857143
np.average(range(1,5),weights=range(4,0,-1))
2.0
a=np.array([1,2,6,3,4,5,8]) np.var(a)
4.979591836734693
a=np.array([1,2,6,3,4,5,8]) np.std(a)
2.231499907401901
a=np.array((1,2,3)) a
array([1, 2, 3])
b=np.array((4,2,1)) b
array([4, 2, 1])
a.dot(b) #向量内积
11
np.dot(a,b)
11
c = np.array(([1,2,3],[4,5,6],[7,8,9])) c.dot(a)
array([14, 32, 50])
a.dot(c)
array([30, 36, 42])