我想使用numpy.dtype()对象构造一个具有各种不同数据类型的numpy数组。
我有一本字典' mydict'在存储有关数据的所有信息的地方,我想用它创建一个数据类型对象dt
。 ' mydict'是根据我选择的属性动态创建的,数据类型也与属性对应!
import numpy as np
mydict={'name0': 'mass', 'name1': 'position', 'name2': 'ID',
'format0': np.float32, 'format1': np.int8, 'format2': np.uint64}
数据类型对象dt
应该如下所示
dt = np.dtype([('mass', np.float32), ('position', np.int8), ('ID', np.uint64)])
我的问题是如何创建dt
而不将其手动构建/编写到代码中?
主要问题是我不知道如何将np.dtype()
附加到' name'和'格式'组合或如果可能的话......
我正在使用dt
然后将我的数据读入这样的numpy数组中!
data_array=np.array((nr_rows, nr_cols)), dtype=dt)
我尝试过使用Dict Comprehensions,list和dictionaries的某些尝试,但我找不到正确的方法来做到这一点。
答案 0 :(得分:1)
In [209]: dd={'name0': 'mass', 'name1': 'position', 'name2': 'ID',
...: 'format0': np.float32, 'format1': np.int8, 'format2': np.uint64}
In [213]: [(dd['name%s'%i],dd['format%s'%i]) for i in range(3)]
Out[213]: [('mass', numpy.float32), ('position', numpy.int8), ('ID', numpy.uint64)]
In [214]: dt=np.dtype([(dd['name%s'%i],dd['format%s'%i]) for i in range(3)])
In [216]: arr = np.zeros((2,), dt)
In [217]: arr
Out[217]:
array([( 0., 0, 0), ( 0., 0, 0)],
dtype=[('mass', '<f4'), ('position', 'i1'), ('ID', '<u8')])
答案 1 :(得分:0)
如果你的密钥遵循问题中的严格模式,你可以看看这个; 1)提取键以 name 开头的值,并将它们设置为元组的第一个元素; 2)用格式替换 name ,并提取相应的值作为元组的第二个元素; 3)从元组列表中构造dtype。
<div id="addEdit" style="width 100%; height 100%; background-color #fff;">
<div class="demo-section k-content">
<ul class="fieldlist">
<li>
<label for="simple-input" >Employee Number</label>
<input id="simple-input" type="text" class="k-textbox" style="width: 40%;" />
</li>
<li>
<label for="simple-input">ForeName</label>
<input id="simple-input" type="text" class="k-textbox" style="width: 40%;" />
</li>
<li>
<label for="simple-input">ForeName</label>
<input id="simple-input" type="text" class="k-textbox" style="width: 40%;" />
</li>
<li>
<label for="simple-input">Surname</label>
<input id="simple-input" type="text" class="k-textbox" style="width: 40%;" />
</li>
<li>
<label for="simple-input">Preferred Name</label>
<input id="simple-input" type="text" class="k-textbox" style="width: 40%;" />
</li>
<li>
<label for="simple-input" class="form-horizontal">Language</label>
<input id="language" class="form-horizontal" style="width: 40%;" />
</li>
<li>
<label for="simple-input">Country</label>
<input id="country" style="width: 40%;" />
</li>
<li>
<label for="simple-input">Time Zone</label>
<input id="simple-input" type="text" class="k-textbox" style="width: 40%;" />
</li>
<li>
<label for="simple-input">Domain</label>
<input id="simple-input" type="text" class="k-textbox" style="width: 40%;" />
</li>
<li>
<label for="simple-input">Network Id</label>
<input id="simple-input" type="text" class="k-textbox" style="width: 40%;" />
</li>
<li>
<label for="simple-input">Email Address</label>
<input id="simple-input" type="text" class="k-textbox" style="width: 40%;" />
</li>
<li>
<label for="simple-input">Status</label>
<input id="simple-input" type="text" class="k-textbox" style="width: 40%;" />
</li>
<li>
<button id="btnCancel" class="k-button">Cancel</button>
<button class="k-button k-primary">Save</button>
</li>
</ul>
<style>
.fieldlist {
margin: 0 0 -2em;
padding: 0;
}
.fieldlist li {
list-style: none;
padding-bottom: 2em;
}
.fieldlist label {
display: block;
padding-bottom: 1em;
font-weight: bold;
text-transform: uppercase;
font-size: 10px;
color: #444;
}
</style>
</div>
</div>
注意:您最初可能需要OrderDict才能在此处获得正确的列顺序。