创建numpy数组,然后排序数组

2024-10-02 18:18:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了一个似乎无法解决的问题,我需要获取字符串列表并计算一些值,然后将相关字符串和相关整数添加到numpy数组中。我被告知要先创建由零组成的numpy数组,因为它的长度是已知的,所以我可以这样做。我的问题是如何迭代地将每个字符串添加到第一列(名称),将每个值(标签)添加到第二列,然后按第一列的字母顺序对整个数组排序

fileCount = sum([len(files) for r, d, files in os.walk(inputDirectory)])
labelArray = np.zeros(shape = (fileCount,2))
arrayInsertCounter = 0

for label, subDirectories in enumerate(inputDirectory):

  subDirPath = os.path.join(inputDirectory, subDirectories)

  for name in subDirPath:

    labelArray[arrayInsertCounter] = [name,label]
    arrayInsertCounter += 1

Tags: 字符串nameinnumpyforosfiles数组
1条回答
网友
1楼 · 发布于 2024-10-02 18:18:26

您可以使用结构化数组在numpy中完成

import numpy as np

labels = list(map(''.join, zip(*3*((chr(ord('a')+(19*i)%24) for i in range(24)),))))
numbers = np.arange(8)

dt = np.dtype([('label', object), ('value', int)])

table = np.empty((8,), dtype = dt)

table['label'] = labels
table['value'] = numbers

print(table)
table.sort()
print(table)

输出:

#[('ato', 0) ('jex', 1) ('sni', 2) ('dwr', 3) ('mhc', 4) ('vql', 5)
# ('gbu', 6) ('pkf', 7)]
#[('ato', 0) ('dwr', 3) ('gbu', 6) ('jex', 1) ('mhc', 4) ('pkf', 7)
# ('sni', 2) ('vql', 5)]

编辑:如何访问单个记录:

table[2] = 'new label', 1000
table
# array([('ato',    0), ('dwr',    3), ('new label', 1000), ('jex',    1),
#        ('mhc',    4), ('pkf',    7), ('sni',    2), ('vql',    5)],
#       dtype=[('label', 'O'), ('value', '<i8')])

相关问题 更多 >