编辑:我已将np.array
更改为np.arange
,以便更好地解释我的问题。
作为Python的新手,我仍然在为数据结构付出很多努力。这似乎应该是一个非常明显(并且明显重复)的问题,但我无法理解其他解释以使其发挥作用。
我需要创建一个列表列表(和/或数组,我将在一分钟内解释这一点),所有列表都有不同的长度和范围。我按照以下方式设置了我的初始数组,但我仍然不了解如何创建' partotal'阵列。我知道语法错误但仍然不明白为什么。
import numpy as np
par1 = np.arange([10,80,1])
par2 = np.arange([50,120,1])
par3 = np.arange([0,40,1])
par4 = np.arange([0,30,1])
partotal = np.array([par1][par2][par3][par4])
你可能已经猜到,第二个问题是我不知道我是应该使用numpy数组,列表列表,pandas还是完全不同的东西。由于我的所有数组都有不同的长度,我发现很难理解如何将它们放在一起或再次删除它们。
编辑:partotal
的目的是为另一个函数创建一组起始位置(见下文)
inputnumber = 200
def positions(partotal, inputnumber):
return np.random.uniform(partotal, size=(inputnumber, len(partotal)))
我知道这听起来非常基本,但作为初学者,我发现它令人困惑和困难。大多数答案都集中在语法上,并没有帮助我们发展真正的洞察力。如果有人可以花一些时间来解释非常明显我会很感激。
最终编辑:当我理解自己的问题时,答案非常简单。为了可能需要遵循我的思考过程的其他人,我不会删除帖子的其余部分。
par = 3
par1 = np.random.uniform(10,80,size=par)
par2 = np.random.uniform(5,120,size=par)
par3 = np.random.uniform(0,40,size=par)
allpar = np.array([par1,par2,par3])
答案 0 :(得分:0)
如果您尝试创建二维数组,则可以将二维列表传递给np.array
。
np.array([[10, 80, 1], [50, 120, 1], [0, 40, 1], [0, 30, 1]])
不确定这是否适合您,但在您的具体情况下,您可以这样做:
partotal = np.array([par1, par2, par3, par4])
答案 1 :(得分:0)
uniform
的常见用途是指定标量start
和stop
值以及形状:
In [101]: np.random.uniform(0,1,size=(3,4))
Out[101]:
array([[0.87953793, 0.83726369, 0.53280941, 0.69611469],
[0.78369061, 0.99258945, 0.65533223, 0.8342177 ],
[0.69943211, 0.53965698, 0.06419811, 0.36591087]])
这是从[0,1)绘制的12个值,以(3,4)数组排列。
它的文档说start
和stop
可以是数组,但对于它们的使用方式并不是很清楚。最好的线索是:
np.broadcast(low, high).size
样本被抽出。
所以尝试(3,1)和(1,4)输入,我们再次获得(3,4)数组。
In [102]: np.random.uniform(np.zeros((3,1)), np.ones((1,4)))
Out[102]:
array([[0.35865707, 0.39068231, 0.9117642 , 0.49346499],
[0.1439195 , 0.1217748 , 0.21780452, 0.83235673],
[0.24894503, 0.36413268, 0.51516651, 0.8480244 ]])
分别从(0,1),(10,11)和(20,21)生成3个数字:
In [105]: np.random.uniform(np.arange(0,30,10), np.arange(1,31,10))
Out[105]: array([ 0.54715093, 10.75390957, 20.98101312])
我不知道你要对这4个阵列做些什么。
In [107]: par1 = np.arange(10,80) # corrected usage
...: par2 = np.arange(50,120)
...: par3 = np.arange(0,40)
...: par4 = np.arange(0,30)
我可以将这4个数组连接成一个:
In [108]: par = np.concatenate([par1,par2,par3,par4])
In [109]: par.shape
Out[109]: (210,)
使用不同的长度,hstack
是唯一的选择。
请注意,我构建了这些数组的列表,并将其用作concatenate
的输入(正如预期的那样)。
In [110]: alist = [par1,par2,par3,par4]
列表或数组列表是一个简单的Python构造。它当然应该在尝试制作阵列数组(不同大小)之前使用。但我不明白这对uniform
是如何适用的(正如我刚才所说)。
另一个(3,4)随机值数组:
In [111]: np.random.uniform(np.arange(3)[:,None], np.arange(4))
Out[111]:
array([[0. , 0.74651856, 0.60318064, 0.75254649],
[0.49864947, 1. , 1.60558937, 2.06444058],
[1.03298196, 1.80321816, 2. , 2.3358475 ]])
每个元素取自不同的范围
[0,0) [0,1) [0,2)
[1,0) [1,1) [1,2)
[2,0) ...
答案 2 :(得分:0)
感谢大家的帮助,我意识到这是一个措辞极其严厉的问题。答案结果很简单:
val = 4 # or any required number of start points
par1 = np.random.uniform(10,60,size=val)
par2 = np.random.uniform(0,20,size=val)
par3 = np.random.uniform(0,30,size=val)
allpar = np.array([par1,par2,par3])
这给了我一个正确值的数组,在指定的边界内有正确数量的随机生成的点。
感谢所有贡献的人。