Numpy 属性
import numpy as np
a = np.arange(15).reshape(3,5)
print(a)
print(a.shape)
print(a.ndim)
print(a.dtype.name)
print(a.itemsize)
print(a.size)
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
(3, 5)
2
int64
8
15
c = np.array([[1,2],[3,4]],dtype=complex)
c
array([[1.+0.j, 2.+0.j],
[3.+0.j, 4.+0.j]])
np.zeros((3,4))
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
np.ones((2,3,4),dtype=np.int16)
array([[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]],
[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]]], dtype=int16)
np.empty((2,3))
array([[4.65806473e-310, 0.00000000e+000, 0.00000000e+000],
[0.00000000e+000, 0.00000000e+000, 0.00000000e+000]])
np.arange(10,30,5)
array([10, 15, 20, 25])
np.arange(0,2,0.3)
array([0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])
from numpy import pi
np.linspace(0,2,9)
# 线性等分的意思
array([0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
x = np.linspace(0,2*pi,100)
f = np.sin(x)
np.arange(10000)
array([ 0, 1, 2, ..., 9997, 9998, 9999])
np.arange(10000).reshape(100,100)
array([[ 0, 1, 2, ..., 97, 98, 99],
[ 100, 101, 102, ..., 197, 198, 199],
[ 200, 201, 202, ..., 297, 298, 299],
...,
[9700, 9701, 9702, ..., 9797, 9798, 9799],
[9800, 9801, 9802, ..., 9897, 9898, 9899],
[9900, 9901, 9902, ..., 9997, 9998, 9999]])
import sys
np.set_printoptions(threshold=sys.maxsize)
b = np.arange(12).reshape(3,4)
b
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
b.sum(axis=0)
array([12, 15, 18, 21])
b.sum(axis=1)
array([ 6, 22, 38])
axis=0:列
axis=1:行
b.min(axis=1)
array([0, 4, 8])
b.cumsum(axis=1)
array([[ 0, 1, 3, 6],
[ 4, 9, 15, 22],
[ 8, 17, 27, 38]])
cumsum: 累加
cumulative sum along each row
b = np.arange(3)
np.exp(b)
array([1. , 2.71828183, 7.3890561 ])
np.sqrt(b)
array([0. , 1. , 1.41421356])
c = np.array([2.,-1.,4.])
np.add(b,c)
array([2., 0., 6.])
a = np.arange(10)**3
a
array([ 0, 1, 8, 27, 64, 125, 216, 343, 512, 729])
a[2]
8
a[2:5]
array([ 8, 27, 64])
[2,5) 的意思
a = np.arange(2,14).reshape(3,4)
a
array([[ 2, 3, 4, 5],
[ 6, 7, 8, 9],
[10, 11, 12, 13]])
a.argmin()
0
a.argmax()
11
a.mean()
7.5
np.median(a)
7.5
a = np.linspace(0,20,20).reshape(4,5)
a
array([[ 0. , 1.05263158, 2.10526316, 3.15789474, 4.21052632],
[ 5.26315789, 6.31578947, 7.36842105, 8.42105263, 9.47368421],
[10.52631579, 11.57894737, 12.63157895, 13.68421053, 14.73684211],
[15.78947368, 16.84210526, 17.89473684, 18.94736842, 20. ]])
np.diff(a)
array([[1.05263158, 1.05263158, 1.05263158, 1.05263158],
[1.05263158, 1.05263158, 1.05263158, 1.05263158],
[1.05263158, 1.05263158, 1.05263158, 1.05263158],
[1.05263158, 1.05263158, 1.05263158, 1.05263158]])
a = np.arange(14,2,-1).reshape(3,4)
a
array([[14, 13, 12, 11],
[10, 9, 8, 7],
[ 6, 5, 4, 3]])
np.sort(a)
array([[11, 12, 13, 14],
[ 7, 8, 9, 10],
[ 3, 4, 5, 6]])
a.T
array([[14, 10, 6],
[13, 9, 5],
[12, 8, 4],
[11, 7, 3]])
(a.T).dot(a)
array([[332, 302, 272, 242],
[302, 275, 248, 221],
[272, 248, 224, 200],
[242, 221, 200, 179]])
np.clip(a,5,9)
array([[9, 9, 9, 9],
[9, 9, 8, 7],
[6, 5, 5, 5]])
所有大于9的都变成9
所有小于5的都变成5
np.mean(a,axis=1)
array([12.5, 8.5, 4.5])
Numpy索引
a = np.arange(3,15)
a
array([ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
a[2]
5
a = np.arange(3,15).reshape(3,4)
print(a)
a[2]
# a[2,:]
[[ 3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]]
array([11, 12, 13, 14])
a[2][2]
# a[2,2]
13
for row in a:
print(row)
[3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]
for column in a.T:
print(column)
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]
[ 6 10 14]
a.flatten()
array([ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
for item in a.flat:
print(item)
3
4
5
6
7
8
9
10
11
12
13
14
flatten() : 返回一个一维的数组
flat : 一个迭代器
Numpy array合并
a = np.array([1,1,1])
b = np.array([2,2,2])
c = np.vstack((a,b)) # vertical stack
d = np.hstack((a,b)) # horizontal stack
print(a.shape,c.shape,d.shape)
print(c)
print(d)
(3,) (2, 3) (6,)
[[1 1 1]
[2 2 2]]
[1 1 1 2 2 2]
a = np.array([1,1,1])[:,np.newaxis]
b = np.array([2,2,2])[:,np.newaxis]
print(a)
[[1]
[1]
[1]]
c = np.vstack((a,b))
c
array([[1],
[1],
[1],
[2],
[2],
[2]])
c.shape
(6, 1)
d = np.hstack((a,b))
print(d.shape)
(3, 2)
d
array([[1, 2],
[1, 2],
[1, 2]])
c = np.concatenate((a,b,b,a),axis=1)
c
array([[1, 2, 2, 1],
[1, 2, 2, 1],
[1, 2, 2, 1]])
Numpy array分割
a = np.arange(12).reshape(3,4)
a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
np.split(a,2,axis=1)
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
np.split(a,3,axis=0)
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
axis=0 : 对每一列自上而下执行
axis=1 : 对每一行自左向右执行
print(np.vsplit(a,3)) # 纵向分三块
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
print(np.hsplit(a,2)) # 横向分两块
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
不等分割
np.array_split(a,3,axis=1)
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]
Numpy copy
这里要分为浅复制和深复制
浅的话,就像是引用,别名
深的话,就是复制
# 浅
a = np.arange(5)
b = a
c = a
d = b
# 这里a,b,c,d都是一个东西,一个改变,其他跟着改变
a
array([0, 1, 2, 3, 4])
a[1]=55
a
array([ 0, 55, 2, 3, 4])
b
array([ 0, 55, 2, 3, 4])
c[0:3]=[4,5,6]
d
array([4, 5, 6, 3, 4])
d is a
True
# 深
a = np.arange(2,6)
print(a)
b = a.copy()
print(b)
a[:] = [9,9,9,9]
print(a)
print(b)
[2 3 4 5]
[2 3 4 5]
[9 9 9 9]
[2 3 4 5]
a 是 a
b 是 b