我有一个 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/