将整数字符串列表转换为整数数组的最有效方法

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (233)

我有一个简单的问题 - 我需要将整数字符串转换为整数列表并将其插入到numpy数组中。

我有代码可以工作,但如果有一个更有效的方法我感兴趣。起始条件是我有一个整数字符串列表(第4行),目标是获得一个填充了这些整数的numpy数组。

这是我使用的代码示例:

import numpy as np
print("Hello StackOverflow")

listOfStringOfINTs = ["123231231231231"]*5
print(listOfStringOfINTs)
numpyVectorOfInts = np.empty([len(listOfStringOfINTs),len(listOfStringOfINTs[0]) ], dtype='int')
for i, IntString in enumerate(listOfStringOfINTs):
    numpyVectorOfInts[i] = list(map(int, IntString))

print(numpyVectorOfInts)
提问于
用户回答回答于

以上所有答案都是正确的,但直观地说,最容易理解的是:

    >>> k = [list(x) for x in listOfStringOfINTs ]
    >>> print(np.array(k, dtype=np.int64))
    [[1 2 3 2 3 1 2 3 1 2 3 1 2 3 1]
     [1 2 3 2 3 1 2 3 1 2 3 1 2 3 1]
     [1 2 3 2 3 1 2 3 1 2 3 1 2 3 1]
     [1 2 3 2 3 1 2 3 1 2 3 1 2 3 1]
     [1 2 3 2 3 1 2 3 1 2 3 1 2 3 1]]
用户回答回答于

我不确定速度会更好,但更简单:

In [68]: np.array([list(astr) for astr in listOfStringOfINTs],int)           
Out[68]: 
array([[1, 2, 3, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1],
       [1, 2, 3, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1],
       [1, 2, 3, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1],
       [1, 2, 3, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1],
       [1, 2, 3, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1]])

list(astr)将字符串拆分为1个字符串的列表。在np.arrayintD型转换需要的所有字符串的照顾。

或者你可以将所有字符串连接成字符串,制作列表,然后重塑数组:

np.array(list(''.join(listOfStringOfINTs)),int).reshape(5,-1)

扫码关注云+社区

领取腾讯云代金券