Python:用已知列创建多维数组

Python:用已知列创建多维数组,python,arrays,python-3.x,numpy,multidimensional-array,Python,Arrays,Python 3.x,Numpy,Multidimensional Array,我已经知道要创建为5x269形状数组的列 metadata_dtype = np.dtype([('frameNumber', np.int), ('year', np.int), ('day', np.int), ('seconds', np.int), ('sosStepIndex', np.int)]) frame_metadata_data = np.array([(frames), (years), (days), (seconds), (sos_step_index)], metad

我已经知道要创建为5x269形状数组的列

metadata_dtype = np.dtype([('frameNumber', np.int), ('year', np.int), ('day', np.int), ('seconds', np.int), ('sosStepIndex', np.int)])
frame_metadata_data = np.array([(frames), (years), (days), (seconds), (sos_step_index)], metadata_dtype)

,以及
sos_step_索引
都是1x269数组。不幸的是,当我执行上述代码时,我得到了一个5x269数组,但数组中的每个项都包含一个1x5列表,该列表具有相同的重复值。

您可以创建一个空数组并更新它:

metadata_dtype = np.dtype([('frameNumber', np.int), ('year', np.int), ('day', np.int), ('seconds', np.int), ('sosStepIndex', np.int)])
frame_metadata_data = np.empty(len(frames),dtype=metadata_dtype)
frame_metadata_data['frameNumber'] = frames
frame_metadata_data['year'] = years
frame_metadata_data['day'] = days
frame_metadata_data['seconds'] = seconds
frame_metadata_data['sosStepIndex'] = sos_step_index
更新:如果需要非结构化数组:

frame_metadata_data = np.stack((frames, years, days, seconds, sos_step_index)).T
在这种情况下,所有数组都必须有一个数据类型,不能按名称调用它们,而可以使用索引来调用它们。例如,
frames
将是
frame\u metadata\u data[:,0]

另一种方法是使用熊猫:

frame_metadata_data = pd.DataFrame({'frameNumber':frames, 'year':years, 'day':days, 'seconds':seconds, 'sosStepIndex':sos_step_index})

元组列表应该是每个记录一个元组。看起来您正在尝试(但失败)为每个字段提供一个元组。。再看一遍文档和示例。你有推荐的文档和示例吗?我第一次在堆栈溢出上发帖,因为我还没有找到我要做的事情的示例。numpy结构化数组文档页面怎么样?这些都是按行而不是按列列出的示例。如何将单个列转换为组合行?这很好,因为它使我更接近我所需要的。不幸的是,它似乎创建了一个1x256数组,其中每个条目都是列表(frameNumber、year、day、seconds、sosStepIndex)。我需要一个5x256array@ElizabethM如果您不想要结构化数组(这是本文提供的),那么所有数组的数据类型都必须相同(非结构化numpy数组只有一个数据类型)。在这种情况下,您将无法命名列。我将添加这种方法以及可能更适合您的情况的熊猫方法。