python的矩阵基础知识

# #!/usr/bin/env python
# # coding: utf-8
#
# # In[ ]:
#
#
import numpy as np #导入NumPy
X = np.array(5) # 创建0D张量,也就是标量
print("X的值",X)
print("X的阶",X.ndim) #ndim属性显示张量轴的个数
print("X的数据类型",X.dtype) # dtype属性显示张量数据类型
print("X的形状",X.shape) # shape属性显示张量形状

n = 0
for gender in [0,1]:
     n = n + 1 # Python要求4个空格表示语句块缩进
X = np.array([5,6,7,8,9]) #创建1D张量,也就是向量
print("X的值",X)
print("X的阶",X.ndim) #ndim属性显示张量轴的个数
print("X的形状",X.shape) # shape属性显示张量形状

X = np.array([5]) # 1维的向量,就是1D数组里面只有一个元素
from keras.datasets import boston_housing # 波士顿房价数据集
(X_train, y_train), (X_test, y_test) = boston_housing.load_data()
print("X_train的形状:", X_train.shape)
print("X_train中第一个样本的形状:", X_train[0].shape)
print("y_train的形状:", y_train.shape)
weight = np.array([1,-1.8,1,1,2]) # 权重向量(也就是多项式的参数)
X = np.array([1,6,7,8,9]) # 特征向量(也就是一个特定样本中的特征值)
y_hat = np.dot(X,weight) # 通过点积运算构建预测函数
print('函数返回结果:', y_hat) # 输出预测结果
y_hat = weight.dot(X) # X.dot(weight)也可以实现同样结果
print("X_train的内容:", X_train) #X_train是2D张量,即矩阵
# 创建3D张量
X = np.array([[[1, 22, 4, 78, 2],
               [2, 59, 6, 56, 1],
               [3, 31, 8, 54, 0]],
              [[4, 56, 9, 34, 1],
               [5, 78, 8, 35, 2],
               [6, 34, 7, 36, 0]],
              [[7, 45,5, 34, 5],
               [8, 53, 6, 35, 4],
               [9, 81, 4, 36, 5]]])


####################################################################################################
#!/usr/bin/env python
# coding: utf-8

# In[31]:


import numpy as np # 导入NumPy数学工具集
list=[1,2,3,4,5] # 创建列表
array_01=np.array([1,2,3,4,5]) # 列表转化成数组
array_02=np.array((6,7,8,9,10)) # 元组转化成数组
array_03=np.array([[1,2,3],[4,5,6]]) # 列表转化成2D数组
print ('列表:', list)
print ('列表转化为数组:', array_01)
print ('元组转化为数组:', array_02)
print ('2D数组:', array_03)
print ('数组的形状:', array_01.shape)
# print ('列表的形状:', list.shape) # 列表没有形状,程序会报错


# In[32]:


array_04=np.arange(1,5,1) # 通过arange函数生成数组
array_05=np.linspace(1,5,5) # 通过linspace函数生成数组
print (array_04)
print (array_05)
'''
arange(a,b,c)函数产生a~b(不包括b),间隔为c的一个数组;而linspace(a,b,c)函数是把a~b(包括b)平均分成c份
'''

# # In[33]:


array_06 = np.arange(10)
print (array_06)
index_01 = array_06[3] # 索引-第4个元素
print ('第4个元素', index_01)
index_02 = array_06[-1] # 索引-最后一个元素
print ('第-1个元素', index_02)
slice_01 = array_06[:4] # 从0到4切片
print ('从0到4切片', slice_01)
slice_02 = array_06[0:12:4] # 从0到12切片,步长为4
print ('从0到12切片,步长为4', slice_02)


# # In[34]:

#对mnist数据集的5000个数据样本进行切片
from keras.datasets import mnist #需要打开internet选项)
(X_train, y_train), (X_test, y_test) = mnist.load_data()
print (X_train.shape)
X_train_slice = X_train[10000:15000,:,:]#10000:15000,把样本进行切片,后面两个冒号的意思是剩下两个轴里的数据全部保留
#(对这个图片样本集,如果后面两个轴也切片,图片28px*28px的结构就破坏了,相当于把图片进行剪裁)
print (X_train_slice)

# # In[35]:


array_07 = np.array([[1,2,3],[4,5,6]])
print (array_07[1:2],'它的形状是', array_07[1:2].shape)
print (array_07[1:2][0], '它的形状又不同了', array_07[1:2][0].shape)


# # In[36]:


array_07 += 1 # 数组内全部元素加1
print (array_07)


# # In[37]:


#shape它的功能是读取矩阵的长度,比如shape[0]就是读取矩阵第一维度的长度
for i in range(array_07.shape[0]):#第0行
    for j in range(array_07.shape[1]):#第1列
        array_07[i,j] += 1
print(array_07)
print (np.sqrt(array_07)) #打印每一个元素的平方根
print (array_07,'形状是', array_07.shape)
print (array_07[1:2][0], '它的形状又不同了', array_07[1:2][0].shape)#这里的shape是指一行有多少个元素
print (array_07.reshape(3,2), '形状是', array_07.reshape(3,2).shape)
array_07 = array_07.reshape(3,2) #进行赋值才能改变数组本身
array_07 = np.array([[1,2,3],[4,5,6]])
array_07 = array_07.T # 矩阵的转置
print (array_07, ' 矩阵转置后形状是', array_07.shape)
print (array_07[0:2][1], '它的形状不同了', array_07[0:2][0].shape)#[0:1]是指第0行到第1行(不包括第一行)
print (array_07[1:2][0], '它的形状又不同了', array_07[1:2][0].shape)


# In[42]:


array_06 = np.arange(10)
print (array_06,'形状是', array_06.shape,'阶为', array_06.ndim)
array_06 = array_06.reshape(10,1)#10行1列
print (array_06,'形状是', array_06.shape,'阶为', array_06.ndim)


# In[43]:


array_08 = np.array([[0,0,0], [10,10,10], [20,20,20], [30,30,30]])#四行三列
array_09 = np.array([[0,1,2]])#一行三列
array_10 = np.array([[0],[1],[2],[3]])#四行一列
list_11 = [[0,1,2]]
print ('array_08的形状:', array_08.shape)
print ('array_09的形状:', array_09)
print ('array_10:', array_10)
#reshape改变数组形状,看这篇博客https://blog.csdn.net/weixin_43382066/article/details/109297620
#array_12 = array_09.reshape(3,1)#三行一列
array_12 = array_09.reshape(1,3)#一行三列
print (array_12,'array_12的形状:', array_12.shape)
array_13 = np.array([1])
print ('array_13:', array_13)
print ('array_13的形状:', array_13.shape)
array_14 = array_13.reshape(1,1)
print (array_14,'array_14的形状:', array_14.shape)
print ('08 + 09结果:',array_08 + array_09)
print ('08 + 10结果:',array_08 + array_10)
print ('08 + 11结果:',array_08 + list_11)
#print ('08 + 12结果:',array_08 + array_12)
print ('08 + 13结果:',array_08 + array_13)
print ('08 + 14结果:',array_08 + array_14)


# # In[44]:

vector_01 = np.array([1,2,3])
vector_02 = np.array([[1],[2],[3]])
vector_03 = np.array([2])
vector_04 = vector_02.reshape(1,3)
print (vector_01,'vector_01的形状:', vector_01.shape)
print (vector_02,'vector_02的形状:', vector_02.shape)
print (vector_03,'vector_03的形状:', vector_03.shape)
print (vector_04,'vector_04的形状:', vector_04.shape)
print ('01和01的点积:', np.dot(vector_01,vector_01))
print ('01和02的点积:', np.dot(vector_01,vector_02))
print ('04和02的点积:', np.dot(vector_04,vector_02))
print ('01和数字的点积:', np.dot(vector_01,2))
print ('02和03的点积:', np.dot(vector_02,vector_03))
print ('02和04的点积:', np.dot(vector_02,vector_04))
# print ('01和03的点积:', np.dot(vector_01,vector_03)) # 程序会报错
# print ('02和02的点积:', np.dot(vector_02,vector_02))


# # In[45]:
matrix_01 = np.arange(0,6).reshape(2,3)
matrix_02 = np.arange(0,6).reshape(3,2)
print("matrix_01:",matrix_01)
print("matrix_02:",matrix_02)
print ('01和02的点积:', np.dot(matrix_01,matrix_02))#矩阵相乘
print ('02和01的点积:', np.dot(matrix_02,matrix_01))
#print ('01和01的点积:', np.dot(matrix_01,matrix_01))会报错


输出:

X的值 5
X的阶 0
X的数据类型 int32
X的形状 ()
X的值 [5 6 7 8 9]
X的阶 1
X的形状 (5,)
2022-05-20 14:28:56.376340: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'cudart64_110.dll'; dlerror: cudart64_110.dll not found
2022-05-20 14:28:56.376894: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
X_train的形状: (404, 13)
X_train中第一个样本的形状: (13,)
y_train的形状: (404,)
函数返回结果: 23.2
X_train的内容: [[1.23247e+00 0.00000e+00 8.14000e+00 ... 2.10000e+01 3.96900e+02
  1.87200e+01]
 [2.17700e-02 8.25000e+01 2.03000e+00 ... 1.47000e+01 3.95380e+02
  3.11000e+00]
 [4.89822e+00 0.00000e+00 1.81000e+01 ... 2.02000e+01 3.75520e+02
  3.26000e+00]
 ...
 [3.46600e-02 3.50000e+01 6.06000e+00 ... 1.69000e+01 3.62250e+02
  7.83000e+00]
 [2.14918e+00 0.00000e+00 1.95800e+01 ... 1.47000e+01 2.61950e+02
  1.57900e+01]
 [1.43900e-02 6.00000e+01 2.93000e+00 ... 1.56000e+01 3.76700e+02
  4.38000e+00]]
列表: [1, 2, 3, 4, 5]
列表转化为数组: [1 2 3 4 5]
元组转化为数组: [ 6  7  8  9 10]
2D数组: [[1 2 3]
 [4 5 6]]
数组的形状: (5,)
[1 2 3 4]
[1. 2. 3. 4. 5.]
[0 1 2 3 4 5 6 7 8 9]
第4个元素 3
第-1个元素 9
从0到4切片 [0 1 2 3]
从0到12切片,步长为4 [0 4 8]
(60000, 28, 28)
[[[0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]
  ...
  [0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]]

 [[0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]
  ...
  [0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]]

 [[0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]
  ...
  [0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]]

 ...

 [[0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]
  ...
  [0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]]

 [[0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]
  ...
  [0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]]

 [[0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]
  ...
  [0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]
  [0 0 0 ... 0 0 0]]]
[[4 5 6]] 它的形状是 (1, 3)
[4 5 6] 它的形状又不同了 (3,)
[[2 3 4]
 [5 6 7]]
[[3 4 5]
 [6 7 8]]
[[1.73205081 2.         2.23606798]
 [2.44948974 2.64575131 2.82842712]]
[[3 4 5]
 [6 7 8]] 形状是 (2, 3)
[6 7 8] 它的形状又不同了 (3,)
[[3 4]
 [5 6]
 [7 8]] 形状是 (3, 2)
[[1 4]
 [2 5]
 [3 6]]  矩阵转置后形状是 (3, 2)
[2 5] 它的形状不同了 (2,)
[2 5] 它的形状又不同了 (2,)
[0 1 2 3 4 5 6 7 8 9] 形状是 (10,) 阶为 1
[[0]
 [1]
 [2]
 [3]
 [4]
 [5]
 [6]
 [7]
 [8]
 [9]] 形状是 (10, 1) 阶为 2
array_08的形状: (4, 3)
array_09的形状: [[0 1 2]]
array_10: [[0]
 [1]
 [2]
 [3]]
[[0 1 2]] array_12的形状: (1, 3)
array_13: [1]
array_13的形状: (1,)
[[1]] array_14的形状: (1, 1)
08 + 09结果: [[ 0  1  2]
 [10 11 12]
 [20 21 22]
 [30 31 32]]
08 + 10结果: [[ 0  0  0]
 [11 11 11]
 [22 22 22]
 [33 33 33]]
08 + 11结果: [[ 0  1  2]
 [10 11 12]
 [20 21 22]
 [30 31 32]]
08 + 13结果: [[ 1  1  1]
 [11 11 11]
 [21 21 21]
 [31 31 31]]
08 + 14结果: [[ 1  1  1]
 [11 11 11]
 [21 21 21]
 [31 31 31]]
[1 2 3] vector_01的形状: (3,)
[[1]
 [2]
 [3]] vector_02的形状: (3, 1)
[2] vector_03的形状: (1,)
[[1 2 3]] vector_04的形状: (1, 3)
01和01的点积: 14
01和02的点积: [14]
04和02的点积: [[14]]
01和数字的点积: [2 4 6]
02和03的点积: [2 4 6]
02和04的点积: [[1 2 3]
 [2 4 6]
 [3 6 9]]
matrix_01: [[0 1 2]
 [3 4 5]]
matrix_02: [[0 1]
 [2 3]
 [4 5]]
01和02的点积: [[10 13]
 [28 40]]
02和01的点积: [[ 3  4  5]
 [ 9 14 19]
 [15 24 33]]
Traceback (most recent call last):
  File "E:\code_file\pythonStudy\skimage\machineStudy\second.py", line 200, in <module>
    print ('01和01的点积:', np.dot(matrix_01,matrix_01))
  File "<__array_function__ internals>", line 180, in dot
ValueError: shapes (2,3) and (2,3) not aligned: 3 (dim 1) != 2 (dim 0)

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2022年5月22日
下一篇 2022年5月22日

相关推荐