【问题标题】:How to map a Python array into a NumPy array如何将 Python 数组映射到 NumPy 数组
【发布时间】:2014-08-25 19:11:24
【问题描述】:

我有一个数组数组:

import numpy as np
from numpy import array
data = [[1.0,0.56,1.3,1.0],
        [2.0,0.59,1.3,1.0], 
        [3.0,0.63,1.3,1.0],
        [4.0,0.66,1.3,1.0]]

我正在尝试映射到这个 NumPy 表单:

[[array([ 0.,  1.]), array([ 0.,  0.56]), array([ 0.,  1.3]), array([ 0.,  1.])], [array([ 0.,  2.]), array([ 0.,  0.59]), array([ 0.,  1.3]), array([ 0.,  1.])], [array([ 0.,  3.]), array([ 0.,  0.63]), array([ 0.,  1.3]), array([ 0.,  1.0.])], [array([ 0.,  4.]), array([ 0.,  0.66]), array([ 0.,  1.3]), array([ 0.,  1.])]]

我已经尝试过以下操作:

s = Set([])
maxNDimValues = max(map(lambda x: len(s.union(Set(x))), transpose(data)))
valueMap = identity(maxNDimValues).astype(float64)
trainingitems = map(lambda x: map(lambda y: valueMap[y-1], x), data)

但它没有用。

【问题讨论】:

  • 如果data 是一个列表列表,为什么np.array(data) 不够用?
  • 为什么需要一维数组的列表,而不是单个二维数组?
  • 出于某种原因,当我尝试这样做时,它以原始形式打印了数组,尽管我将 numpy 导入为 np 并从 numpy 导入数组

标签: python arrays numpy mapping


【解决方案1】:

哦,我想我明白你现在想要做什么了。从列表列表中,您(出于某种原因我真的不明白)想要一个数组元素列表的列表,每个列表都包含一个 0 和原始项目。

最明显的方式(以双 for 循环为代价)是

result = [[np.array([0, x]) for x in row] for row in data]

更好的做法可能是使用 3 维 numpy 数组。

temp = np.array(data)
temp = np.expand_dims(temp, 2)
result = np.concatenate((np.zeros(temp.shape), temp), axis=2)

【讨论】:

  • 第一个变体几乎尖叫要写成列表理解,它太简洁了[[np.array([0, x]) for x in row] for row in data]。
  • 是的,这正是我想要做的。谢谢!
  • @moarningsun 确实如此,因为我主要使用 python 和 numpy,所以我从来没有真正花时间学习如何简洁地编写纯 python。按照建议进行了编辑。
猜你喜欢
  • 2018-08-31
  • 1970-01-01
  • 2021-11-14
  • 2016-08-09
  • 1970-01-01
  • 2017-05-19
  • 2016-03-05
  • 2013-06-11
  • 1970-01-01
相关资源
最近更新 更多