【发布时间】:2021-05-30 13:58:26
【问题描述】:
我正在从多个 d 维立方体构建一个坐标数组。我想从一个空数组开始,并附加我在每个 for 循环中生成的坐标。但是,np.concatenate(和 vstack)需要一个现有的匹配维度数组。我也想保持维度而不是得到一个平面数组。
这是我想做的想法:
#sample from d-dimensional cube
def make_cubes(d, npoints, ncubes):
cubes = []
for i in range(ncubes):
c = np.random.rand(npoints, d) #sample from cube in d dimensions
c += np.random.uniform(-5,5) #random translation
cubes = np.concatenate((cubes, c))
return cubes
为了让它真正起作用,我必须将多维数据集定义为
cubes = [[]]
for d in range(d):
cubes[0].append(np.nan)
【问题讨论】:
-
那么,
cubes的最终形状是什么?(ncubes, npoints, d)? -
它们可以是任何东西,但例如我想要五个每个 100 点的 3 维立方体(d=3,ncubes=5,npoints=100)。所以 cubes.shape = (500,3)
-
在循环中重复
np.concatenate是个坏主意。请改用列表append。 -
@900edges 整行毫无意义。形状为
(500, 3)的数组是 2D 数组,而不是 3D。您还将知道基于输入的形状是什么,正如您所说的那样,它将是(npoints*ncubes, d)。但是,我认为您对np.random.rand的作用有误。它返回一个数组,其中包含您给它的形状的随机值。因此,如果您需要一个形状为(500, 3)的数组,那么您可以立即提出要求。 -
append删除结构,给出一个扁平化的数组。在这种情况下,您将如何使用它? @hpaulj
标签: python arrays numpy concatenation