Skip to content

向量 Vector

kkksc03 edited this page Mar 5, 2020 · 5 revisions

向量 Vector

CYaRon的向量功能可以帮助您生成一个list,包括若干个向量。 在算法竞赛中,需要生成互不相同的坐标集,或者一组不重复的数列是很有用的。

用法:

list Vector.random(num=5, position_range=[10], mode=0)
  • 参数 num:生成的向量个数。
  • 参数 position_range:一个list。内有几个元素那么就是输出几维向量。每个元素可以是一个二维整数(或实数)元组(min,max)表示每一维的取值是[min,max],也可以是可以是一个整数(或实数)k,则范围是[0,k]。当该参数只有一个元素是,则生成的是一组数列而不是向量
  • 参数 mode:模式选择。0为互相不重复的整数向量,1为允许出现重复的整数向量(各维完全独立随机),2为实数向量。

一些范例:

output = Vector.random()
#默认值,随机生成5个[0,10]的不重复数字的数列。

output = Vector.random(10, [(10,50)])
#生成10个范围在[10,50]之间的不重复数字数列。

output = Vector.random(30, [(10,50), 20])
#生成30个第一维范围[10,50]之间、第二维范围在[0,20]之间的不重复的二维向量。

output = Vector.random(30, [(1,10), (1,10), (1,10)], 2)
#生成30个每一维范围[1,10]之间的三维实数向量。

output = Vector.random(30, [10], 1)
#生成30个[0,10]之间的随机数,当然肯定会有重复咯。

在不使用pypy的情况下,生成一组1e5个unique的二维向量,坐标值不超过1e9,大约需要10秒钟。生成向量的算法均摊复杂度大于O(num),小于O(num*log(num))

默认情况下,即使是一维数列,每一项数字也是一个列表。例如 [[7], [110], [230], [415]],如果需要展平成一个一维 list,可以使用 sum(output,[])