栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Numpy 数组的操作

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Numpy 数组的操作

ndarray数组 均为同类型数据

创建数组的方法
arr1 = np.array([1,2,3,4,5]) # 构造方法 由列表转换为数组
[1 2 3 4 5]

arr2 = np.array(range(0,10))
[0 1 2 3 4 5 6 7 8 9]

arr3 = np.arange(10) # 内部功能函数 只能创建一维数组
[0 1 2 3 4 5 6 7 8 9]

arr4 = np.arange(10,35,3) # 区分于range
[10 13 16 19 22 25 28 31 34]

arr5 = np.zeros((5,2)) # 任意维度
[[0. 0.]
 [0. 0.]
 [0. 0.]
 [0. 0.]
 [0. 0.]]

arr6 = np.zeros(1) # 注意一维数组要加逗号
[0.]

arr7 = np.empty((3,2)) # 随机
[[0.00000000e+00 3.85901628e-57]
 [6.58139982e-38 3.37996361e-57]
 [0.00000000e+00 0.00000000e+00]]

arr8 = np.full((3,2),6) #(维度,填充内容)
[[6 6]
 [6 6]
 [6 6]]

arr9 = np.eye(3) # 创建单位矩阵
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

arr10 = np.random.random((2,3)) # random
[[0.64437913 0.9991426  0.72643201]
 [0.48119623 0.23374243 0.87856805]]
向量 

只有一列的数组

vec1 = np.array([[2],[1],[3]])
[[2]
 [1]
 [3]]

vec2 = np.array([[1,2,3]])
[[1 2 3]]
ec2.shape # 获取数组形状
(1, 3)

vec3 = vec2.T # 属性 转置
[[1]
 [2]
 [3]]

vec3.shape
(3, 1)

vec4 = np.transpose(np.array(vec2)) # 函数 转置
[[1]
 [2]
 [3]]

vec5 = np.array([[[1]]]) # 几个方括号就是几维数组
vec5.shape
(1, 1, 1)
数据类型
# dtype 属性
x = np.array([1,2,3], dtype = float) # 指定类型
print(x.dtype)
float64

y = x.astype(int) # 强制类型转换
print(y.dtype)
int64
数据形状
a = np.random.random((3,4))
print(a)
[[0.52657856 0.67840272 0.30837733 0.3467796 ]
 [0.61453058 0.46593445 0.22989515 0.26439116]
 [0.68405527 0.19711851 0.62534821 0.14745157]]
print(a.ravel()) # ravel()函数转换为一维数组 从左往右 从上到下
[0.52657856 0.67840272 0.30837733 0.3467796  0.61453058 0.46593445
 0.22989515 0.26439116 0.68405527 0.19711851 0.62534821 0.14745157]
print(a.ravel('F')) # 从上到下 从左往右 a的转置
[0.52657856 0.61453058 0.68405527 0.67840272 0.46593445 0.19711851
 0.30837733 0.22989515 0.62534821 0.3467796  0.26439116 0.14745157]

print(a.reshape(6,2)) # 强制改变形状得到新数组
[[0.52657856 0.67840272]
 [0.30837733 0.3467796 ]
 [0.61453058 0.46593445]
 [0.22989515 0.26439116]
 [0.68405527 0.19711851]
 [0.62534821 0.14745157]]

print(a.reshape(6,-1)) # -1自动计算
[[0.52657856 0.67840272]
 [0.30837733 0.3467796 ]
 [0.61453058 0.46593445]
 [0.22989515 0.26439116]
 [0.68405527 0.19711851]
 [0.62534821 0.14745157]]

a.reshape(6,2) # 新对象 不会改变a
print(a.T) # 转置
[[0.52657856 0.61453058 0.68405527]
 [0.67840272 0.46593445 0.19711851]
 [0.30837733 0.22989515 0.62534821]
 [0.3467796  0.26439116 0.14745157]]

a.resize(6,2) # 改变原数组
print(a)
[[0.52657856 0.67840272]
 [0.30837733 0.3467796 ]
 [0.61453058 0.46593445]
 [0.22989515 0.26439116]
 [0.68405527 0.19711851]
 [0.62534821 0.14745157]]
运算
m = np.array([[1,2],[3,4]],dtype = np.float64)
n = np.array([[5,6],[7,8]],dtype = np.float64)
print(m + n)
print(np.add(m,n))
[[ 6.  8.]
 [10. 12.]]

print(m * n) # 对应元素相乘
print(np.multiply(m,n))
[[ 5. 12.]
 [21. 32.]]

print(m.dot(n)) # 矩阵乘法
[[19. 22.]
 [43. 50.]]
索引
a = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
b = np.array([0,2,0,1])
print(a[np.arange(4),b]) # b不是切片
[ 1  6  7 11]

print(a[:2,1:3]) # 每个维都要指定一个切片
[[2 3]
 [5 6]]

c = np.arange(0,6).reshape(3,2)
d = (c > 2) # d为布尔数组
print(c[b])
[[0 1]
 [4 5]
 [0 1]
 [2 3]]
print(c[(c>2) & (c<4)]) # 用位运算符
[3]

print(c[np.where(c >= 2)]) # where()函数根据条件返回数组中的值 array([0, 1, 0, 1]))
[2 3 4 5]
赋值、视图与拷贝
a = np.arange(6)
b = a
b[1] = 9
print(b) # python变量
[0 9 2 3 4 5]

c = a.view()
c[0] = 9
c.resize(2,3)
print(a.shape) # 创建新对象
(6,)
print(a) # 与原数组共享数据
[9 9 2 3 4 5]

# copy() 方法生成数组及其数据的完整副本
练习——计算三元一次方程组

有关numpy线性运算

a = np.array([[1,-2,1],[0,2,-8],[-4,5,9]])
b = np.array([[0],[8],[-9]])

# 方法一
A = np.matrix(a) # 转换为矩阵
B = np.matrix(b)
A_I = A.I #     求逆矩阵
X = A_I * B

# 方法二
a_i = np.linalg.inv(a)
x = a_i.dot(b)

# 方法三
X = np.linalg.solve(A,B)
x = np.linalg.solve(a,b) # 这样也可以

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/753095.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号