“同四维跌落到三维一样,三维空间也会向二维空间跌落,由一个维度蜷缩到微观中。那一小片二维空间的面积——它只有面积——会迅速扩大,这又引发了更大规模的跌落……我们现在就处在向二维跌落的空间中,最终,整个太阳系将跌落到二维,也就是说,太阳系将变成一副厚度为零的画。”
01
—
维度
上面引用了三体的一段话,想探讨一下维度的事情。处理数据的时候,我们是习惯了将相同的性质的数据分门别类。有个很有意思的事情,既然大部分人认为四维是指时间,那么为什么不能说每一种分类方式就是一个维度。
举个例子:注册规划师考四门,那就好比四个维度,有一百个注册规划师组成的列队,按他们原理、相关、法规、实务的分数进行排名,那就是四组数据;四组数据只能形成100行4列的二维矩阵;假设加上注册建筑师、注册结构师、注册暖通等等,又可以整理成一个三维矩阵;再按士、农、工、商等去区分,升级成一个四维矩阵。
因为有太多的数据在我们面前,还有一句话叫“选择大于努力”。最近的研究项里其实就是要在大量数据中找到最理想的那组数据,因此我写了不少代码,在数据的运算过程中又发现,如果要在合理的时间内做出计算,那还得提高计算的速度,那就得用到numba、cpython等。
02
—
数据扩充
选址大于努力的话,其实很多时候就是在做排列组合题。之前听东吴相对论里头有讲到,如果生活中有太多的事情压积在一起,那就先列举100件,载从中选20件,最终挑出最重要的五件事情开始做。
上面是讲现实生活中的例子,主要是想解释我之前是怎样写又长又复杂的代码,通过几个简单的python的模块让代码变得简单。
# 从十个数中选五个数的结果
x5 = []
for a in range (1,11):
for b in range(a+1,11):
for c in range(b + 1, 11):
for d in range(c + 1, 11):
for e in range(d + 1, 11):
x5.append([a,b,c,d,e])
最开始从十个数选五个数大概要写7行代码。
import itertools
c10 = [1, 2, 3, 4, 5, 6, 7, 8, 9,10]
c105 = itertools.combinations(c10, 5))
加上引用模块共3行。
03
—
蝴蝶效应
电影《蝴蝶效应》里面,男主因为一个决定,导致了整个人生都不一样,每个人只拥有一个人生,当然平行宇宙我也是相信的。数据的处理就不一样了,可以将所有可能性都模拟出来。
前面讲了组合,接下来要讲排列的事情,就拿先苦后甜,先甜后苦;或者是有一块五花肉,先吃瘦的部分再吃肥的,还是相反那就是不同的排列。
排列的代码也是第二部分用到的模块:
import itertools
# 八个数的全排列可能
[0, 1, 2, 3, 4, 5, 6, 7] =
list(itertools.permutations(arr)) =
04
—
降维分析
前面的排列组合作为扩充数据的方式,那接下来具体应用一下,就拿一到十十个数按第一名到十名随机生成数字,每个数字要有一次,这样去生成一个8行10列的矩阵数据。这是原始矩阵,如果按8期每次去选0到7的数去跟它相加并取除10的余数,那就能生成一个40320个与原始矩阵的三维矩阵。
import itertools
import numpy as np
import numba as nb
ysj=[[9,8,4,6,1,7,3,2,10,5],
[8,7,9,1,4,3,6,10,2,5],
[1,8,2,9,7,6,10,3,4,5],
[10,8,1,5,4,7,2,3,9,6],
[5,10,1,3,4,7,2,9,6,8],
[8,2,6,1,4,9,10,7,5,3],
[10,5,8,4,3,7,9,1,2,6],
[9,5,6,8,7,10,1,4,3,2]]
arr = [0, 1, 2, 3, 4, 5, 6, 7]
pailie = list(itertools.permutations(arr))
mmm = np.array(ysj)
nn = mmm.reshape(8, 10).T
nnn = np.repeat(nn, 40320, axis=0)
d=np.array(pailie)
jjj = d.reshape(40320, 8)
kkk = jjj.tolist() * 10
lll = np.array(kkk)
ff = (lll + nnn) % 10
@nb.jit()
def func(x):
z=len(set(x))
return z
jg = np.apply_along_axis(func, 1, ff)
降维分析可以写成一个函数,利用np.apply_along_axis完成所有矩阵的某根轴的计算。@nb.jit()进行加速。
这样加大了数据量,也能进行单个数列的运算,最有最劣的可能都能列举出来。
后台回复关键词:教育,可查看我的个人在线课程,欢迎大家来沟通、交流、共同学习!
往期回顾
本文分享自微信公众号 - 玩大数据的规划师(paitashuju)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4597558/blog/4711272