我可以将1D numpy数组复制到np.array对象的给定属性而不使用for循环吗? 为了使用“dist”数组填充objarray中所有PlotInputGridData对象的“percentage”属性,我使用如下内容:
import numpy as np
class PlotInputGridData(object):
def __init__(self):
self.rangemin = 0
self.rangemax = 0
self.rangelabel = ''
self.percentage = 0
self.number = 0
objarray = np.arange(6, dtype=PlotInputGridData)
for i in range(objarray.size):
t = PlotInputGridData()
objarray[i] = t
dist = np.array([52, 26, 12, 6, 3, 1], dtype=np.int)
for i in range(dist.size):
objarray[i].percentage = dist[i]
我需要做
有没有办法将dist []复制到objarray []。百分比以更简洁的方式在最后2行没有for循环?
答案 0 :(得分:3)
如果没有for-loop,我认为没有办法完成这项任务。
如果您使用structured array而不是对象数组,则可以执行此操作。类PlotInputGridData
只是几个字段,因此它所包含的数据很容易表示为结构化数据类型而不是Python类。
例如,
In [15]: grid_data_type = np.dtype([('rangemin', float),
...: ('rangemax', float),
...: ('rangelabel', 'S16'),
...: ('percentage', float),
...: ('number', int)])
grid_data_type
是一个包含五个字段的结构化数据类型。 (根据需要更改各个字段的类型。)此数据类型可用作numpy数组的dtype
:
In [16]: a = np.zeros(6, dtype=grid_data_dtype)
In [17]: dist = np.array([52, 26, 12, 6, 3, 1])
以下内容将数组dist
分配给'percentage'
字段:
In [18]: a['percentage'] = dist
看看a
:
In [19]: a
Out[19]:
array([(0.0, 0.0, b'', 52.0, 0), (0.0, 0.0, b'', 26.0, 0),
(0.0, 0.0, b'', 12.0, 0), (0.0, 0.0, b'', 6.0, 0),
(0.0, 0.0, b'', 3.0, 0), (0.0, 0.0, b'', 1.0, 0)],
dtype=[('rangemin', '<f8'), ('rangemax', '<f8'), ('rangelabel', 'S16'), ('percentage', '<f8'), ('number', '<i8')])
In [20]: a[0]
Out[20]: (0.0, 0.0, b'', 52.0, 0)
In [21]: a['percentage']
Out[21]: array([ 52., 26., 12., 6., 3., 1.])