学习python第七天

#numpy 的属性
import numpy as np
array = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]) #定义了一个二维矩阵
print(array)
print(array.ndim) #输出矩阵的维度
print(array.shape) #输出矩阵的形状
print(array.size) #输出矩阵的大小
print(array.dtype) #输出矩阵的元素类型

#numpy 的索引
import numpy as np
arr1 = np.arange(2, 14)
print(arr1) #打印出arr1中的数据
print(arr1[2]) #索引出arr1中第二个 元素为4
print(arr1[1:4]) #第一个到第三个位置的元素输出
print(arr1[2:-1]) #第二个位置到负一个位置的元素输出
print(arr1[:5]) #默认从第0个数到第4个

arr2 = arr1.reshape(3, 4) #使用reshape可以对矩阵改变它的行列
print(arr2)
print(arr2[0]) #输出arr2的第o行
print(arr2[1][1]) #输出第一行第一列的那个元素
print(arr2[1, 1]) #同样可以输出第一行第一列的那个元素
print(arr2[:, 2]) #输出第二列的元素
print(arr2[:][2]) #输出第二行的元素

for i in arr2: #对行进行迭代
print(i)
for j in arr2.T: #对列进行迭代 .T 是行列式的转置的意思
print(j)
for x in arr2.flat: #对矩阵中的每一位数进行迭代
print(x)

#array的合并
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr3 = np.vstack((arr1, arr2)) #注意这里的vstack 只能包一个元素,所以要把arr和艾尔括起来
print(arr3) #打印合并后的矩阵
print(arr3.shape) #输出打印后的矩阵的行列

arr4 = np.hstack((arr1, arr2)) #使用hstack可以进行水平合并
print(arr4)
print(arr4.shape)

arr = np.concatenate((arr2, arr1)) #这种方法也可以对矩阵进行合并
print(arr)
arr = np.concatenate((arr2, arr1), axis=0) #合并的矩阵要形状相同,维度相同,否则会失败
print(arr) #当axis=0 时纵向合并,当axis=1 时横向合并

#这里会发生错,提示矩阵的维数不够
arr = np.concatenate((arr2, arr1), axis=1) #合并的矩阵要形状相同,维度相同,否则会失败
print(arr) #当axis=0 时纵向合并,当axis=1 时横向合并

#第一种解决方法 使用二维及以上的矩阵
arr5 = np.array([[1, 2, 2],
[2, 3, 4]]
)
arr6 = np.array([[1, 2, 4],
[3, 3, 5]]
)
arr = np.concatenate((arr5, arr6), axis=1)
print(arr)

#第二种解决方法 使用 newaxis
arr1_1 = arr1[np.newaxis, :]
print(arr1_1) #打印出来其实际的值没有发生改变,但是它的行维度会增加1. [:,np.newaxis] z这样写就会增加列的维度
print(arr1_1.shape)
arr2_1 = arr2[np.newaxis, :]
print(arr2_1) #打印出来其实际的值没有发生改变,但是它的行维度会增加1
print(arr2_1.shape)
arr = np.concatenate((arr2_1, arr1_1), axis=1) #合并的矩阵要形状相同,维度相同,否则会失败
print(arr) #当axis=0 时纵向合并,当axis=1 时横向合并

#第三种解决方案 使用np.atleast_2darr1_2 = np.atleast_2d(arr1)
arr1_2 = np.atleast_2d(arr1)
print(arr1_2)
print(arr1_2.shape)
print(arr1_2.T) #需要注意的是当矩阵的维度只有一维的时候,实际上 .T这个转置不能生效
arr2_2 = np.atleast_2d(arr2)
arr = np.concatenate((arr2_2, arr1_2), axis=1) #合并的矩阵要形状相同,维度相同,否则会失败
print(arr) #当axis=0 时纵向合并,当axis=1 时横向合并

#array的分割
import numpy as np
arr1 = np.arange(12).reshape(3, 4)
arr = np.arange(12).reshape(4, 3)
print(arr1)
print(arr)

arr2, arr3 = np.split(arr1, 2, axis=1) #利用split函数将arr1水平分割成两份
print(arr2)
print(arr3)

arr4, arr5 = np.split(arr, 2, axis=0) #利用split函数将arr竖直分割成两份
print(arr4)
print(arr5)

#注意当使用 .split 时 是均匀分割,所以对矩阵有行列对称的要求
#解决方案:将 ,split 换位 _split 可以实现非均匀分割

arr2_1, arr3_1, arr4_1 = np.array_split(arr1, 3, axis=1) #利用split函数将arr1水平分割成三份
print(arr2_1)
print(arr3_1)
print(arr4_1)

arr4_1, arr5_1, arr6_1 = np.array_split(arr, 3, axis=0) #利用split函数将arr竖直分割成三份
print(arr4_1)
print(arr5_1)
print(arr6_1)
#以上两种不均允的分割时都会把多的放在前面的矩阵中

#第二种分割的表示 vsplit :垂直分割 hsplit :水平分割
arr1_2, arr2_2, arr3_2 = np.vsplit(arr1, 3) #垂直分割
print(arr1_2)
print(arr2_2)
print(arr3_2)

arr1_3, arr2_3 = np.hsplit(arr1, 2) #水平分割
print(arr1_3)
print(arr2_3)

#numpy的浅拷贝和深拷贝
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = arr1
print(arr1, arr2)
arr2[0] = 2
print(arr1, arr2) #浅拷贝,会和之前的矩阵共用同样一个内存,即它们的元素值会一模一样

arr3 = arr1.copy() #深拷贝,两个矩阵不会占用同一个内存,即元素值发生改变的时候会并不样
arr3[1] = 4.2 #会将小数自动转化为整数保存进矩阵中
print(arr3, arr1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值