【问题标题】:How to insert words in a numpy multidimensional array?如何在 numpy 多维数组中插入单词?
【发布时间】:2014-07-03 12:54:05
【问题描述】:

我需要根据索引将一些从列表中取出的单词放入一个矩阵中。 我的代码如下:

for i in range(no_of_lines):
    for j in range(no_of_lines):
        cuv_matrix[i][j] = cuv_list[mat_index[i][j]]

cuv_list 是单词列表,mat_index 包含与 cuv_list 中的索引对应的索引

cuv_matrix 实际输出是这样的:

[['\x88' 'M' '\x93' ..., '6' '4' '1']
 ['2' '8' '3' ..., '0' '1' '6']
 ['0' '3' '2' ..., '.' '0' '0']
 ..., 
 ['\xff' '\xff' '\xff' ..., '' '0' '.']
 ['0' '' '0' ..., '' '0' '.']
 ['0' '' '0' ..., '0' '.' '0']]

我声明cuv_matrix的方式:

cuv_matrix = numpy.chararray((no_of_lines, no_of_lines))

我做错了什么,如何让矩阵的每个元素成为一个单词,像这样?

预期输出:

[[movie film ..., actor]
      ... ...
character seen ..., director]]

稍后,我需要使用它们的坐标访问矩阵中的单词。

提前致谢!

【问题讨论】:

  • 您应该更新您的问题以包含实际和预期的输出
  • 我现在已经指定了实际和预期的输出。
  • 为什么要将字符串放入numpy数组中?
  • 我不知道,我只是想将单词放在一个矩阵中,这样我就可以通过两次 for... 来访问它们

标签: python numpy multidimensional-array


【解决方案1】:

如果我理解正确的话,cuv_list 只是一个列表,对吧?

所以,你需要一个外部计数器。

k = 0
for i in range(no_of_lines):
    for j in range(no_of_lines):
        cuv_matrix[i][j] = cuv_list[k]
        k += 1

再次查看您的问题,您似乎还需要一本字典来保存信息:

cuv_mat = {}
k = 0
for i in range(no_of_lines):
    for j in range(no_of_lines):
        cuv_matrix[i][j] = cuv_list[k]
        cuv_mat[cuv_list[k]] = (i,j)
        k += 1

或者,如果您想将坐标信息与原始列表一起保存并且可能有重复:

cuv_mat_locations = []
k = 0
for i in range(no_of_lines):
    for j in range(no_of_lines):
       cuv_matrix[i][j] = cuv_list[k]
       cuv_mat_locations.append([cuv_list[k], [i,j]])
       k += 1

【讨论】:

  • cuv_list 是一个列表,但是单词需要放在 cuv_matrix 中的顺序很重要。 mat_index 矩阵包含索引,用作指向 cuv_list 的“指针”。这样,mat_index 给出了单词从 cuv_list 中取出并放入 cuv_matrix 的顺序。
  • 我在编辑您的评论的同时 - 我目前的建议为列表中包含坐标元组的每个项目添加一个字典条目。但是,如果有重复的键,这可能会出现问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-24
  • 2016-03-05
  • 2016-08-31
  • 1970-01-01
  • 2021-05-30
相关资源
最近更新 更多