【发布时间】:2017-09-18 09:25:28
【问题描述】:
我有以下矩阵,它代表了一些点:
points = np.random.uniform(30, 50, size = (5,3))
# gives array([[ 45.98139489, 40.27871523, 41.91617071],
[ 41.1404787 , 34.56098247, 35.91171313],
[ 34.46375465, 49.89872417, 39.04753134],
[ 49.28112722, 32.01837698, 32.83394596],
[ 48.96623168, 33.58271833, 33.54690091]])
现在每一列都是一个坐标。每列都有[30,50] 范围内的值。我想将每一列映射到不同的间隔。由于这个问题,我知道如何将点从一个区间映射到另一个区间:
Algorithm to map an interval to a smaller interval
但我想做一些非常快的事情,并将每一列(可能)映射到不同的间隔。例如假设我们有
intervals = np.array([[0, 10], [3,7], [100,200]])
或者我们可以将它们分开在数组中作为xinterval = np.array([0,10]),没关系。
我的慢速尝试
我收集了intervals中的所有区间,然后通过循环在每一列上使用了转换
for col, interval in zip(range(points.shape[1]), intervals):
points[:, col] = ((points[:,col]-min(points[:,col]))*(interval[1]-interval[0]) / (max(points[:,col])-min(points[:,col])) ) + interval[0]
为简单起见,我使用 min max 范围作为前一个区间,但我可以直接使用 30,50 :
for col, interval in zip(range(points.shape[1]), intervals):
points[:, col] = ((points[:,col]-30)*(interval[1]-interval[0]) / (50-30) ) + interval[0]
有没有更快的方法,不使用循环?
【问题讨论】:
标签: python arrays numpy matrix transform