Numpy学习笔记

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]
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值