将原始数据插入python中随机生成的数据
假设我有一个3d(10x3)np.array:将原始数据插入python中随机生成的数据,python,python-3.x,numpy,Python,Python 3.x,Numpy,假设我有一个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.97
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 ]]
对于每个列,我生成rondom编号,在单个列的最小值和最大值之间,例如,对于第一列:
# 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数组,它是按照给定的顺序排序的。列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
中不在开头或结尾。否则,indivudial列的排序顺序将被打破 解决方案,主要依靠numpy
。不过,对颠倒列顺序的部分不满意。但这并不以数组作为参数
import numpy as np
orgArr = np.asarray([[ 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 ]])
#number of rows to add
n2add = 12
#min/max for each column
orgMin = np.min(orgArr, axis = 0)
orgMax = np.max(orgArr, axis = 0)
#generate array with random values between min/max of each column
randomArr = (orgMax - orgMin) * np.random.random((n2add + orgArr.shape[0], orgArr.shape[1])) + orgMin
#insert original values
randomArr[:orgArr.shape[0], :] = orgArr
#sort values
randomArr.sort(axis = 0)
#determines for each column, if direction of order in orgArr is the same as in randomArr
#and reverses column order, if not
col_ord = np.sign((orgArr[0,:] - orgArr[-1,:])) * np.sign((randomArr[0,:] - randomArr[-1,:]))
for i in range(orgArr.shape[1]):
if col_ord[i] < 0:
randomArr[:,i] = randomArr[::-1,i]
您还可以使用此脚本的其他分发功能,numpy
和scipy
提供了多种功能。例如:
如果现在查看输出数组,您会注意到新生成的值(由更多数字表示)可以在数组的一端找到。但要小心不要超过分布函数的限制(0,1)。示例
mu=0.1 sigma=0.001
显示了对最终分布的影响<代码>0.5/0.2可以正常工作,但您不会收到0.5/5
的错误消息,这将超出初始范围。我不确定插入/混合是什么意思。每个列是否应包含从self.创建\u random\u float
加上原始10个值(因此最终形状(22,3))生成的12个排序随机值,但这些值应出现在列内的随机位置?是,正确。末端的最终形状是(22,3)。但这些不应随机插入,而应以正确的顺序插入。例如,finalArrColX:[*30.1678*、30.16564103、30.03986524、*29.9895*、29.97088507…]
星星之间的数字*来自orgArr
而其他则来自randomArr
我想它将与数组(set(orgArr+randomArr)
一起工作。因此,如果新数组排序不正确,我可以使用sorted>排序(数组,反向=真)
再次?仍然不确定生成结果的规则。在您的示例中,所有值都是降序的。但是根据您的描述,我假设另一个有效的可能性是30.1678、29.9895、30.16564103……对吗?所以两个独立的降序数组在随机位置混合到一个列中?它也可以从w开始使用一个来自randomArr
的值?不,这与它开始的值无关。要点是,我再次以降序获得一列。因此,您的列表无效,因为它没有按降序排序谢谢您的回答。这正是我需要的。我可以问您另一个问题吗?根据的定义np.random.random
它在半开放区间内创建随机浮点数,就像在np.random.uniform
中一样,但这里我们选择低和高。我们自己。我如何确定创建的随机浮点数的标准偏差不大于给定区间。假设我在最小值和最大值之间生成随机数但是SD不应该大于0.2?是的,正是这个函数。但是我不确定如何在上面的例子中使用它
#randomArr
[[ 30.1678 -173.569 725.724 ]
[ 30.11384713 -173.34 725.76 ]
[ 30.02906243 -173.23713466 725.768 ]
[ 29.9895 -173.111 725.795 ]
[ 29.94555434 -173.016 725.83462631]
[ 29.9411 -172.78230979 725.903 ]
[ 29.9306 -172.6898037 725.95312697]
[ 29.92622676 -172.621 725.98 ]
[ 29.91989733 -172.44033232 726.01484565]
[ 29.91581341 -172.42239247 726.08304636]
[ 29.89624414 -172.30021976 726.08525885]
[ 29.84977922 -172.29533928 726.08784464]
[ 29.80493116 -172.274 726.10620276]
[ 29.6754 -172.03366934 726.111 ]
[ 29.63979452 -171.978 726.14750753]
[ 29.585 -171.67822537 726.1535495 ]
[ 29.5277 -171.507 726.173 ]
[ 29.49315771 -171.33446469 726.18671858]
[ 29.42592778 -171.15097712 726.188 ]
[ 29.4114 -170.947 726.24372921]
[ 29.3951 -170.87844982 726.29369897]
[ 29.3577 -170.196 726.384 ]]
randomArr = (orgMax - orgMin) * np.random.normal(0.1, 0.001, (n2add + orgArr.shape[0], orgArr.shape[1])) + orgMin