【问题标题】:NumPy array element not getting updatedNumPy 数组元素未更新
【发布时间】:2016-08-19 02:47:06
【问题描述】:

我有一个如下的 NumPy 数组:

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

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

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

但第 [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。

感谢任何帮助。提前致谢

【问题讨论】:

  • 提示:看看supp[0,0] = 5/6的结果
  • 试图将字符串和数字放在同一个数组中是个坏主意。根据您的操作,Pandas 可能会为您的用例提供更合适的工具,或者最好去掉第一列并使用 float dtype 数组。

标签: python arrays python-3.x numpy


【解决方案1】:

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

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']]

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

【讨论】:

  • 谢谢。今天学到了一个新东西。 :)
  • 我也是! ;) 顺便说一句,我完全赞同 user2357112 的评论。您可能应该考虑一下...使用dtype=object 可能很方便,但您会在数值计算上失去很多加速,这通常是使用 numpy 的重点。
猜你喜欢
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
  • 2021-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多