NumPy数组元素没有得到更新

时间:2016-08-19 02:47:06

标签: python arrays python-3.x numpy

我有一个NumPy数组如下:

$row = mysqli_fetch_assoc($resulted);
echo $row['name'];

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

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

但排[2]似乎仍未受影响..

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

我正在使用Python 3.5.2和NumPy 1.11.1。

感谢任何帮助。提前致谢

1 个答案:

答案 0 :(得分:5)

问题是np.array只有一种类型,它自动被假定为字符串supp.dtype == '|S1',因为您的输入只包含长度为1的字符串。因此,numpy会自动将更新的输入转换为长度为1'0'的字符串。强制它为通用类型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']]

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