【发布时间】:2018-03-08 15:23:57
【问题描述】:
假设我有一个 3d (10x3) np.array :
orgArr = [[ 30.1678 -173.569 725.724 ]
[ 29.9895 -173.34 725.76 ]
[ 29.9411 -173.111 725.768 ]
[ 29.9306 -173.016 725.98 ]
[ 29.6754 -172.621 725.795 ]
[ 29.5277 -172.274 725.903 ]
[ 29.585 -171.978 726.111 ]
[ 29.4114 -171.507 726.188 ]
[ 29.3951 -170.947 726.173 ]
[ 29.3577 -170.196 726.384 ]]
对于每一列,我会在各个列的最小值和最大值之间生成随机数,例如,对于第一列:
# Find min/max
colXMin = np.min(orgArr[:, 0])
colXMax = np.max(orgArr[:, 0])
# Generate random number between min/max
size = 12
addRandomToColX = self.create_random_floats(colXMin, colXMax, size)
# Sort the random numbers
sortRandomColX= sorted(addRandomToColX, reverse= True)
print('sortRandomColX:', sortRandomColX)
# Do same for cols y and z
...
# Create 3d array finally
randomArr = np.array([sortRandomColX, sortRandomColY, sortRandomColZ]).T
print('randomArr:', randomArr)
def create_random_floats(low, high, size):
return [random.uniform(low, high) for _ in range(size)]
所以我得到了 12x3 数组,它按照给定的顺序排序。 col x 减少,但 y 和 z 增加:
randomArr:
[[ 30.16564103 -173.45321119 725.74404996]
[ 30.03986524 -173.17110927 725.84951132]
[ 29.97088507 -173.15435901 725.85341553]
[ 29.79273295 -172.76247176 725.97347288]
[ 29.53294671 -170.90169722 726.27944054]
[ 29.53182418 -170.88261603 726.34089036]
[ 29.52163245 -170.72931883 726.34411865]
[ 29.50194557 -170.71866152 726.34946239]
[ 29.45834997 -170.68671434 726.36413176]
[ 29.4426014 -170.57381107 726.37110357]
[ 29.43702889 -170.40826716 726.45476367]
[ 29.3621429 -169.77240546 726.51968671]]
如何在randomArr 数据中再次随机插入/混合我的orgArr 并在整个大小上分布?我的意思不是在randomArr 的开头或结尾。否则,各个列的排序顺序将被破坏。
【问题讨论】:
-
我不确定您所说的 insert/mix 是什么意思。每列是否应包含从
self.create_random_floats生成的 12 个排序随机值加上原始 10 个值(最终形状为 (22, 3)),但这些应出现在列内的随机位置? -
是的,正确的。最后的最终形状是 (22, 3)。但是这些不应该随机插入,而是以正确的顺序插入。例如。
finalArrColX: [*30.1678*, 30.16564103, 30.03986524, *29.9895*, 29.97088507 ...]星号 * 来自orgArr其他来自randomArr -
我想它可以与
array(set(orgArr + randomArr)一起使用。所以如果新的数组没有正确排序,我可以用sorted(array, reverse= True)再次排序吗? -
仍然不确定构建结果的规则。在您的示例中,所有值都是递减的。但是根据您的描述,我认为另一种有效的可能性是 30.1678、29.9895、30.16564103 ......对吗?那么两个独立下降的数组在随机位置混合成一列?它也可以从
randomArr的值开始? -
不,它开始的价值无关紧要。重点是,我再次按降序获得一列。所以你的列表无效,因为它没有按降序排序
标签: python python-3.x numpy