Python 如何用字典类型的元素填充数组
我需要用字典中的元素填充数组。例如:Python 如何用字典类型的元素填充数组,python,arrays,numpy,dictionary,Python,Arrays,Numpy,Dictionary,我需要用字典中的元素填充数组。例如: a = np.empty(2,2) 我需要这样填写(这是不允许的) 其中b和c是数据帧的其他列表/数组或列 import numpy as np a = np.zeros((2, 2)) b = np.ones(a.shape[0]) c = np.ones(a.shape[1]) * [2] list_a = a.tolist() for i in range(2): for j in range(2): list_a[i][j]
a = np.empty(2,2)
我需要这样填写(这是不允许的)
其中b
和c
是数据帧的其他列表/数组或列
import numpy as np
a = np.zeros((2, 2))
b = np.ones(a.shape[0])
c = np.ones(a.shape[1]) * [2]
list_a = a.tolist()
for i in range(2):
for j in range(2):
list_a[i][j] = {'x': b[i], 'y': c[j]}
a = np.array(list_a)
print(a)
输出:
array([[{'x': 1.0, 'y': 2.0}, {'x': 1.0, 'y': 2.0}],
[{'x': 1.0, 'y': 2.0}, {'x': 1.0, 'y': 2.0}]], dtype=object)
输出:
array([[{'x': 1.0, 'y': 2.0}, {'x': 1.0, 'y': 2.0}],
[{'x': 1.0, 'y': 2.0}, {'x': 1.0, 'y': 2.0}]], dtype=object)
如果创建对象数据类型数组,则可以在插槽中放置任何内容:
In [9]: a = np.empty((2,2), object)
In [10]: a
Out[10]:
array([[None, None], # empty() fills with None
[None, None]], dtype=object)
In [11]: for i in range(2):
...: for j in range(2):
...: a[i,j] = {'x':b[i], 'y':c[j]}
...:
In [12]: a
Out[12]:
array([[{'x': 1, 'y': 4}, {'x': 1, 'y': 3}],
[{'x': 3, 'y': 4}, {'x': 3, 'y': 3}]], dtype=object)
但列表理解也同样有效
In [13]: [[{'x':b[i],'y':c[j]} for j in range(2)] for i in range(2)]
Out[13]: [[{'x': 1, 'y': 4}, {'x': 1, 'y': 3}], [{'x': 3, 'y': 4}, {'x': 3, 'y': 3}]]
In [14]: np.array(_)
Out[14]:
array([[{'x': 1, 'y': 4}, {'x': 1, 'y': 3}],
[{'x': 3, 'y': 4}, {'x': 3, 'y': 3}]], dtype=object)
或者,您可以从一个平面列表开始,重塑阵列:
In [15]: [{'x':b[i],'y':c[j]} for j in range(2) for i in range(2)]
Out[15]: [{'x': 1, 'y': 4}, {'x': 3, 'y': 4}, {'x': 1, 'y': 3}, {'x': 3, 'y': 3}]
In [16]: np.array(_)
Out[16]:
array([{'x': 1, 'y': 4}, {'x': 3, 'y': 4}, {'x': 1, 'y': 3},
{'x': 3, 'y': 3}], dtype=object)
In [18]: _.reshape(2,2)
Out[18]:
array([[{'x': 1, 'y': 4}, {'x': 3, 'y': 4}],
[{'x': 1, 'y': 3}, {'x': 3, 'y': 3}]], dtype=object)
此字典数组的使用不会比列表更容易或更快
或者,我们可以创建一个包含2个命名字段的结构化数组。从元组列表开始:
In [19]: [(b[i],c[j]) for j in range(2) for i in range(2)]
Out[19]: [(1, 4), (3, 4), (1, 3), (3, 3)]
In [20]: np.array(_, dtype=[('x',int),('y',int)])
Out[20]: array([(1, 4), (3, 4), (1, 3), (3, 3)], dtype=[('x', '<i8'), ('y', '<i8')])
In [21]: _.reshape(2,2)
Out[21]:
array([[(1, 4), (3, 4)],
[(1, 3), (3, 3)]], dtype=[('x', '<i8'), ('y', '<i8')])
In [22]: _['x']
Out[22]:
array([[1, 3],
[1, 3]])
如果创建对象数据类型数组,则可以在插槽中放置任何内容:
In [9]: a = np.empty((2,2), object)
In [10]: a
Out[10]:
array([[None, None], # empty() fills with None
[None, None]], dtype=object)
In [11]: for i in range(2):
...: for j in range(2):
...: a[i,j] = {'x':b[i], 'y':c[j]}
...:
In [12]: a
Out[12]:
array([[{'x': 1, 'y': 4}, {'x': 1, 'y': 3}],
[{'x': 3, 'y': 4}, {'x': 3, 'y': 3}]], dtype=object)
但列表理解也同样有效
In [13]: [[{'x':b[i],'y':c[j]} for j in range(2)] for i in range(2)]
Out[13]: [[{'x': 1, 'y': 4}, {'x': 1, 'y': 3}], [{'x': 3, 'y': 4}, {'x': 3, 'y': 3}]]
In [14]: np.array(_)
Out[14]:
array([[{'x': 1, 'y': 4}, {'x': 1, 'y': 3}],
[{'x': 3, 'y': 4}, {'x': 3, 'y': 3}]], dtype=object)
或者,您可以从一个平面列表开始,重塑阵列:
In [15]: [{'x':b[i],'y':c[j]} for j in range(2) for i in range(2)]
Out[15]: [{'x': 1, 'y': 4}, {'x': 3, 'y': 4}, {'x': 1, 'y': 3}, {'x': 3, 'y': 3}]
In [16]: np.array(_)
Out[16]:
array([{'x': 1, 'y': 4}, {'x': 3, 'y': 4}, {'x': 1, 'y': 3},
{'x': 3, 'y': 3}], dtype=object)
In [18]: _.reshape(2,2)
Out[18]:
array([[{'x': 1, 'y': 4}, {'x': 3, 'y': 4}],
[{'x': 1, 'y': 3}, {'x': 3, 'y': 3}]], dtype=object)
此字典数组的使用不会比列表更容易或更快
或者,我们可以创建一个包含2个命名字段的结构化数组。从元组列表开始:
In [19]: [(b[i],c[j]) for j in range(2) for i in range(2)]
Out[19]: [(1, 4), (3, 4), (1, 3), (3, 3)]
In [20]: np.array(_, dtype=[('x',int),('y',int)])
Out[20]: array([(1, 4), (3, 4), (1, 3), (3, 3)], dtype=[('x', '<i8'), ('y', '<i8')])
In [21]: _.reshape(2,2)
Out[21]:
array([[(1, 4), (3, 4)],
[(1, 3), (3, 3)]], dtype=[('x', '<i8'), ('y', '<i8')])
In [22]: _['x']
Out[22]:
array([[1, 3],
[1, 3]])
为什么要为此使用numpy数组?使用列表你的问题是什么?添加b和cnumpy用于数字数组的示例;如果您想要一个dict数组,请使用列表;如果您想要类似数据库的结构,请尝试使用pandas。您可以使用
object
dtype
:a=np.empty((2,2),object)
。正如其他海报所建议的,生成的array
s功能是有限的,但是如果您只需要“ND索引”,那么您就可以了,为什么要使用numpy数组呢?使用列表你的问题是什么?添加b和cnumpy用于数字数组的示例;如果您想要一个dict数组,请使用列表;如果您想要类似数据库的结构,请尝试使用pandas。您可以使用object
dtype
:a=np.empty((2,2),object)
。正如其他海报所建议的那样,生成的array
s功能是有限的,但是如果您只需要“ND索引”,您就可以了,