introduction:
this function is just for the algorithm practice and improvement . if you want to operate the matrix , i suggest you take advantage of scipy
model . it's more efficient and simple .
background:
记得大学学习线性代数课时,始终无法理解矩阵这玩意是什么东东,总觉得这东西不过是某些数学巨擘凭空设定的一些公理和定理,太抽象,在现实生活中完全找不到的一点感官的依据。对于矩阵性质和操作更多的是停留在记忆性的理解上面。难以有这刻骨铭心的触感。后来因为考研的原因,对线性代数重温的一篇,虽然记忆更加深刻了,但是感性认识依旧严重不足。
connection:
因为受编程思想的影响,开始有意识的将数学程序化,一快速解决研究过程中的一些问题。下面
# _*_ coding: utf-8 -*-
'''
name : matrix anti-clock 90 degree turn around
author : *****
date : 2013-10-19
matrix
1 2 3
4 5 6
7 8 9
reverse it anti-clock 90
into
3 6 9
2 5 8
1 4 7
'''
上述问题是我在CSDN 上看到的一道算法题,我将其直接转述成头文件的模式加以阐述。
接触了数据结构之后,某种程度上知道了矩阵是可以用线性链表数组加以表示的。但是那仅仅是停留在一个理念上。而实际编程的过程中,使用C++来完成使用矩阵的旋转操作,那必然是异常艰难和痛苦。万恶而法力无边的指针让程序设计理念——程序实现之间形成了一条巨大的鸿沟。
python 无指针的特性,让编程有了耳目一新的感觉。
很显然python的多维数组和C++的数组表示方式是有差异的。
例如:在下面矩阵中:
1 2 3
4 5 6
7 8 9
Pyarray[2][1] =6
Carray[2][1] =8
olist1=[1,4,7]
olist2=[2,5,8]
olist3=[3,6,9]
matrix_origin=[olist1,olist2,olist3 ]
def reversematrix(org_list): # according the matrix line and squeue take a reverse
'''Reversematrix(org_list)
THIS function is for reverse the matrix to anti-clock 90 '''
lenth=org_list.__len__() #get the lenth of the list
width=org_list[0].__len__() #get the width of the list
new_matrix=list() #create a new empty list
for i in range(0,width):
newline=[] # empty the list
for j in range(lenth-1,-1,-1):
newline.append(org_list[j][i])
new_matrix.append(newline) # add the new list into the target 2 dimension list
return new_matrix
print reversematrix(matrix_origin)
python 数组的设计理念和线性代数上的列向量是非常相像。通过向量中嵌套向量的方式,我们可以得到一个矩阵。
当时我在想,如果在列向量中二次嵌套一个向量,那将得到一个每个元素均为向量的矩阵。
A00 A10 A20 A30
A01 A11 A21 A31
A02 A12 A22 A32
A03 A13 A23 A33
如果向量A [i][j] 中是一个仅包涵 三个元素的,每个元素的最大值为255,那么矩阵将可作为一个色素点分布矩阵。其本质已经就是图像的原始模型(具体没有考证)如果矩阵是一个深度为4,三次嵌套的矩阵,其中最小列向量包涵4个数值,三个空间坐标值,X,Y,Z, 外加一个时间 T 值,通过矩阵的方式来表示四维空间,是不是更有表现力和依据感呢???
记得当年学习相对论时,始终难以接受如何在三维坐标系中如何再加一个时间坐标轴呢?在欧几里得的思维里面,时间似乎更像是一个死角。但是在矩阵的思维里面,一切都是可细分为最小单元的集合。思维方式的转变,让我们可以打开一扇新的窗户,看到一个不一样的世界。