文章目录
1、数组与numpy的区别
前者保存的是对象的指针,存储空间不是连续的;后者存储在一个均匀连续的内存块
2、numpy的属性
是n维数组对象,数据集容器,但其中的元素类型必须相同
import numpy as np
a=np.array([1,2,3])
b=np.array([[1,2,3],[4,5,6],[7,8,9]])
b[1,1]=10
print(a.shape)#行数和列数
print(b.shape)
print(b)
print(a.dtype)
print(a.size)#元素的个数
输出:
(3,)
(3, 3)
[[ 1 2 3]
[ 4 10 6]
[ 7 8 9]]
int64
3
3、numpy的创建array
(1)创建全0数组
import numpy as np
a = np.zeros((3,4)) # 数据全为0,3行4列
print(a)
输出:
[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]
(2)创建数据全为1数组
import numpy as np
a = np.ones((3,4),dtype = np.int) # 数据为1,3行4列
print(a)
输出:
[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
(3)创建全空数组
a = np.empty((3,4)) # 数据为empty,3行4列
输出:(每个值接近于0)
[[ 1.49166815e-154 3.11108591e+231 2.15722424e-314 2.14972357e-314]
[ 2.14811789e-314 2.14911066e-314 1.49166815e-154 -2.32035388e+077]
[ 1.18499229e-303 1.27613271e-303 2.73454068e-303 5.08956286e-294]]
(4)创建连续数组
a = np.arange(10,20,2) # 10-19 的数据,2步长
b = np.arange(12).reshape((3,4)) # 3行4列,0到11
print(a)
print(b)
输出:
[10 12 14 16 18]
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
4、numpy基础运算
(1)一维矩阵的运算
import numpy as np
a=np.array([10,20,30,40])
b=np.arange(4) #[0,1,2,3]
c=a-b #减法
d=a+b #加法
e=b**2 #二次方
f=a*b #每个数对应相乘
print("c=",c)
print("d=",d)
print("e=",e)
print("f=",f)
print(b<3)#逻辑判断
输出:
c= [10 19 28 37]
d= [10 21 32 43]
e= [0 1 4 9]
f= [ 0 20 60 120]
[ True True True False]
(2)多维矩阵的运算
1)点乘dot()
import numpy as np
a=np.array([[1,1],[0,1]])
b=np.arange(4).reshape((2,2))
c_dot = np.dot(a,b)#矩阵的运算点乘
print(c_dot)
输出:
[[2 4]
[2 3]]
2)sum(),min(),max()用法
#sum(),min(),max()用法
import numpy as np
a=np.random.random((2,4))
print("a =",a)
print("sum =",np.sum(a,axis=1))
print("min =",np.min(a,axis=0))#当axis的值为0的时候,将会以列作为查找单元
print("max =",np.max(a,axis=1))#当axis的值为1的时候,将会以行作为查找单元。
输出:
a = [[ 0.16461141 0.01916649 0.58388487 0.29918644]
[ 0.89686043 0.97445905 0.14243259 0.10364406]]
sum = [ 1.06684922 2.11739614]
min = [ 0.16461141 0.01916649 0.14243259 0.10364406]
max = [ 0.58388487 0.97445905]
3)索引argmin()和argmax()
A = np.arange(2, 14).reshape((3, 4))
print(A)
print(np.argmin(A)) #0
print(np.argmax(A)) #11
输出:
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
0
11
5、Numpy索引
(1)一维索引
import numpy as np
A = np.arange(3, 15)
# array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
print(A[3])
A = np.arange(3, 15).reshape((3, 4))
"""
array([[ 3, 4, 5, 6]
[ 7, 8, 9, 10]
[11, 12, 13, 14]])
"""
print(A[2])
print(A[1,1])
print(A[1,1:3])
for r in A:
print(r)
输出:
6
[11 12 13 14]
8
[8 9]
[3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]
6、Numpy array合并
(1)上下合并:np.vstack()
import numpy as np
A = np.array([1, 1, 1])
B = np.array([2, 2, 2])
C=np.vstack((A, B))
print(C)
print(A.shape,C.shape)
输出:
[[1 1 1]
[2 2 2]]
(3,) (2, 3)
(2)左右合并:np.hstack()
import numpy as np
A = np.array([1, 1, 1])
B = np.array([2, 2, 2])
C = np.hstack((A,B)) # horizontal stack
print(C)
print(A.shape,C.shape)
输出:
[1 1 1 2 2 2]
(3,) (6,)
(3)转置:np.newaxis()
import numpy as np
A = np.array([1, 1, 1])
B = np.array([2, 2, 2])
print(A.shape)
print(A[:,np.newaxis])#加了纵向的一个维度
print(A[:,np.newaxis].shape)
输出:
(3,)
[[1]
[1]
[1]]
(3, 1)
合并:
import numpy as np
A = np.array([1, 1, 1])[:, np.newaxis]
B = np.array([2, 2, 2])[:, np.newaxis]
D = np.hstack((A, B)) # horizontal stack
print(D)
print(A.shape, D.shape)
输出:
[[1 2]
[1 2]
[1 2]]
(3, 1) (3, 2)
(4)多个矩阵合并:np.concatenate
import numpy as np
A = np.array([1, 1, 1])[:, np.newaxis]
B = np.array([2, 2, 2])[:, np.newaxis]
C=np.concatenate((A,B,B,A),axis=1)
D=np.concatenate((A,B,B,A),axis=0)
print(C)
print(D)
输出:
[[1 2 2 1]
[1 2 2 1]
[1 2 2 1]]
[[1]
[1]
[1]
[2]
[2]
[2]
[2]
[2]
[2]
[1]
[1]
[1]]
7、Numpy array
(1)纵向分割
import numpy as np
A = np.arange(12).reshape((3, 4))
print(A)
print(np.split(A, 2, axis=1))#只能等量分,若数字为3,则报错
输出:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
(2)横向分割
import numpy as np
A = np.arange(12).reshape((3, 4))
print(A)
print(np.split(A,3, axis=0))
输出:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
(3)不等量分割
import numpy as np
A = np.arange(12).reshape((3, 4))
print(A)
print(np.array_split(A,2, axis=0))
输出:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[array([[0, 1, 2, 3],
[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
8、unique()和copy()
#unique()
names=np.array(['bob','joe','bob','will','will'])
print(np.unique(names))
输出:
['bob' 'joe' 'will']
#copy()
赋值方式没有关联性
import numpy as np
a = np.arange(4)
# array([0, 1, 2,3])
b = a.copy()
print(b)
a[3] = 44
print(a)
print(b)
输出:
[0 1 2 3]
[ 0 1 2 44]
[0 1 2 3]