【发布时间】:2018-12-01 23:59:58
【问题描述】:
我有一个命名元组列表,我想将其写入一个 numpy 数组。 元组具有属性“colors”(一组两种颜色)和“number”(整数)属性,格式如下:
from collections import namedtuple
import numpy as np
NamedTuple = namedtuple('tuple',['colors','number'])
L = [NamedTuple({'violet', 'blue'}, 4),
NamedTuple({'orange', 'blue'}, 1),
NamedTuple({'green', 'blue'}, 3),
NamedTuple({'orange', 'red'}, 2)]
L
>>>[tuple(colors={'blue', 'violet'}, number=4)...]
L[3].colors
>>>{'orange', 'red'}
我想从 L 写,例如,一个 2x2 数组,这样:
Array[1][1].colors
>>>{'orange', 'red'}
在做
Array = numpy.array(L)
>>>[[{'blue', 'violet'} 4]
[{'blue', 'orange'} 1]
[{'blue', 'green'} 3]
[{'red', 'orange'} 2]
给我一个元组数组,而不是命名元组,它有'没有属性'颜色''
更糟糕的是,如果我尝试将 Array 重塑为 2x2,我会发现我的 namedtuples 的每个属性都被写为数组中的不同对象。
numpy.reshape(Array,(2,2))
>>>...error...
>>>'ValueError: cannot reshape array of size 8 into shape (2,2)'
我会认为上面的数组大小为 4?
如何在不改变命名元组的情况下获得一个命名元组数组,以便可以从数组中的每个元素调用不同的属性?
我想使用 namedtuples 作为我的数据结构的原因是调用每个对象的 .color 或 .number 属性既简单又易读。
我想使用 numpy 数组而不是标准嵌套列表的原因是因为这个数组将成为整个项目中的动态对象,经常会被搜索和更改,而且我知道 python 的标准列表对于这些来说有多糟糕东西。
就上下文而言,我最终试图构建一个程序来玩我自己发明的纸牌游戏。 namedtuples 用它们的颜色和数字表示卡片。阵列代表玩家可以更改和移动的卡片画面。这些命名元组将被改组很多,我不想担心它们的数据结构会被改变。
【问题讨论】:
标签: python arrays numpy namedtuple