python - NumPy 数组元素未更新

标签 python arrays python-3.x numpy

我有一个 NumPy 数组如下:

supp = np.array([['A', '5', '0'], ['B', '3', '0'], ['C', '4', '0'], ['D', '1', '0'], ['E', '2', '0']])

现在,我想将行 [2] 更新为行 [1]/6。 我正在使用..

对于 supp 中的行: 行[2] = 行[1].astype(int)/6

但是 row[2] 似乎没有受到影响..

>>> supp
array([['A', '5', '0'],
   ['B', '3', '0'],
   ['C', '4', '0'],
   ['D', '1', '0'],
   ['E', '2', '0']],  
  dtype='<U1')

我正在使用 Python 3.5.2 和 NumPy 1.11.1。

感谢任何帮助。提前致谢

最佳答案

问题是 np.array 只有一种类型会被自动假定为字符串 supp.dtype == '|S1' 因为您的输入仅包含长度为 1 的字符串。因此 numpy 会自动将您更新的输入转换为长度为 1 的字符串,在您的情况下为 '0'。强制它是通用类型 object 然后它将能够同时具有字符串和整数或 float 或任何其他类型:

supp = np.array([['A', '5', '0'], ['B', '3', '0'], ['C', '4', '0'], ['D', '1', '0'], ['E', '2', '0']])
supp = supp.astype(object)

for row in supp:
    row[2] = int(row[1]) / 6

结果:

[['A' '5' 0.8333333333333334]
 ['B' '3' 0.5]
 ['C' '4' 0.6666666666666666]
 ['D' '1' 0.16666666666666666]
 ['E' '2' 0.3333333333333333]]

或者,您也可以使用 dtype '|Sn' 具有较大的 n 值:

supp = np.array([['A', '5', '0'], ['B', '3', '0'], ['C', '4', '0'], ['D', '1', '0'], ['E', '2', '0']])
supp = supp.astype('|S5')

for row in supp:
    row[2] = int(row[1]) / 6

结果:

[['A' '5' '0.833']
 ['B' '3' '0.5']
 ['C' '4' '0.666']
 ['D' '1' '0.166']
 ['E' '2' '0.333']]

在这种情况下,如果您想要的话,您仍然只有字符串。

关于python - NumPy 数组元素未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39030366/

相关文章:

python - 递归地找到正确的读取顺序

python - PyCharm:在 Python 控制台中执行

python-3.x - RoboBrowser BadRequestKeyError( key )

javascript - 循环遍历二维数组以获取第二列值

python - 将值附加到 TTK 组合框 ['values' ] 而不重新加载组合框

python-3.x - Discord.py 重写Modmail系统

python - Tkinter 在文本中插入 json 数据

python - 了解非 bool 运算符在 bool 值上的使用

c++ - 通过数组漏洞覆盖数据

Javascript 从数组中删除重复的对象