将数组数组转换为NumPy的ndarray ndarray

时间:2015-09-25 14:43:52

标签: python arrays numpy multidimensional-array

我一直试图使用ndarray ndarray来转换数组数组。

这是我的dtype:

dt = 'i8,i8,i8,i8,i8,i8,i8,i8,i8,i8,i8,i8,i8,f8,i8,i8,f8,f8,f8,a50,a50,a50,a50'

这是我的数据:

# data array reduced to one row for sake of readability
data = [[45608L, 0L, 46115L, 11952L, 11952L, 0, 0, 0, 0, 0, 11951L, 11951L, 46176L, 9.0, 0, 1, 1407340577.0, 1407340577.0, 0, 'Simulation Movement', 'planned', '', ''],]

我已经尝试过这些方法:

np.array(data, dt)
np.array([np.array(row, dt) for row in data])

但是当我运行这两个时,我得到了:

TypeError: expected a readable buffer object

Buuuuut,如果我用一个只包含我的行的每个单独元素的数组调用np.array并使用适当的数据类型(使用带有枚举和分割dt的循环执行此操作),它的工作原理。是这样的:

for row in data:
  for index, value in enumerate(row):
    np.array([value,], dt.split(',')[index])

请问任何想法?

1 个答案:

答案 0 :(得分:1)

似乎这样工作,你需要将内部列表转换为元组。示例 -

import numpy as np

dt = 'i8,i8,i8,i8,i8,i8,i8,i8,i8,i8,i8,i8,i8,f8,i8,i8,f8,f8,f8,a50,a50,a50,a50'

data = [[45608L, 0L, 46115L, 11952L, 11952L, 0, 0, 0, 0, 0, 11951L, 11951L, 46176L, 9.0, 0, 1, 1407340577.0, 1407340577.0, 0, 'Simulation Movement', 'planned', '', ''],]

result = np.array(map(tuple, data),dt)

演示运行here。但是这样你得到一个1元素的数组shape = (1,)(1个元素是元组)。

您也可以使用'object'作为dtype,Example -

result1 = np.array(data,'object')

即使这确实导致数组具有正确的形状,但由于混合类型,有些东西可能无法正常工作(但我想你会这么想)。