我有一个scores与某些对象相关联的一维 numpy分数数组。这些对象属于一些不相交的组,第一组项目的所有分数在前,第二组项目的分数在后,以此类推。
我想创建一个二维数组,其中每一行对应一个组,每个条目是其中一个项目的分数。如果所有组的大小相同,我可以这样做:
scores.reshape((numGroups, groupSize))
Run Code Online (Sandbox Code Playgroud)
不幸的是,我的小组可能大小不一。我知道 numpy 不支持参差不齐的数组,但如果结果数组只是用指定的值填充每一行以使所有行的长度相同,那么对我来说很好。
为了具体化,假设我设置A了 3 个项目、B2 个项目和C4 个项目。
scores = numpy.array([f(a[0]), f(a[1]), f(a[2]), f(b[0]), f(b[1]),
f(c[0]), f(c[1]), f(c[2]), f(c[3])])
rowStarts = numpy.array([0, 3, 5])
paddingValue = -1.0
scoresByGroup = groupIntoRows(scores, rowStarts, paddingValue)
Run Code Online (Sandbox Code Playgroud)
的期望值scoresByGroup为:
[[f(a[0]), f(a[1]), f(a[2]), -1.0],
[f(b[0]), f(b[1]), -1.0, -1.0]
[f(c[0]), f(c[1]), f(c[2]), f(c[3])]]
Run Code Online (Sandbox Code Playgroud)
是否有一些 numpy 函数或函数组合可以用来创建groupIntoRows?
背景:
尝试这个:
scores = np.random.rand(9)
row_starts = np.array([0, 3, 5])
row_ends = np.concatenate((row_starts, [len(scores)]))
lens = np.diff(row_ends)
pad_len = np.max(lens) - lens
where_to_pad = np.repeat(row_ends[1:], pad_len)
padding_value = -1.0
padded_scores = np.insert(scores, where_to_pad,
padding_value).reshape(-1, np.max(lens))
>>> padded_scores
array([[ 0.05878244, 0.40804443, 0.35640463, -1. ],
[ 0.39365072, 0.85313545, -1. , -1. ],
[ 0.133687 , 0.73651147, 0.98531828, 0.78940163]])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3651 次 |
| 最近记录: |