更新numpy.ndarray中的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更新numpy.ndarray中的值相关的知识,希望对你有一定的参考价值。

我正在尝试更新数组中的元素。如果我有一个数组说:

[[0, 0],
 [0, 0]]

据我所知,更新方式如下。第一个元素为0.5,是

array[0,0] = 0.5

但是,当我打印数组时,内容不变。我在Stack Overflow上阅读了有关数组创建副本的一些内容,但我不知道这是否适用。

任何帮助都会很棒

答案

你的问题是你的数组是整数值的(因为你用整数初始化它),当你给它写一个浮点数时,它会四舍五入为0.如果你写的话可以检查是否是这种情况

array = np.array([[0, 0], [0, 0]])
array[0, 0] = 1.5
>>> array = array([[1, 0],
                   [0, 0]])

要获得预期的行为,请使用浮点数对其进行初始化

array = np.array([[0., 0.], [0., 0.]])

或明确指定dtype

array = np.array([[0, 0], [0, 0]], dtype=np.float32)
另一答案

数组的数据类型自动设置为int,0.5,因为int为0。

# For example:
In [12]: int(0.5)
Out[12]: 0

# To construct the array try:
array = np.array([[0.0,0.0],[0.0,0.0]])
# or:
array = np.array([[0,0],[0,0]], dtype=float)

然后:

In [9]: array[0,0]=0.5

In [10]: array
Out[10]: 
array([[0.5, 0. ],
       [0. , 0. ]])
另一答案

Python嵌套的list对象不支持类似数组的索引。您只能使用一个值来索引列表

arr = [[0,0], [0,0]]
arr[0][0] = 0.5
arr # [[0.5, 0], [0, 0]]

要使用您在帖子中提到的那种索引,您必须使用numpy数组

import numpy as np
np_arr = np.array([[0,0], [0,0]], dtype=np.float32)
np_arr[0,0] = 0.5
另一答案

在将值更新为float之前,需要更改numpy数组的数据类型

import numpy as np

a = [[0,0],[0,0]]
a = np.array(a)
a = a.astype('float64')
a[0,0] = 0.5
print(a)

这会给你

[[0.5 0. ]
 [0.  0. ]]

以上是关于更新numpy.ndarray中的值的主要内容,如果未能解决你的问题,请参考以下文章

如何在给定索引列表的情况下有效地更新 numpy ndarray

对于非常大的元组/文件/数据库记录/numpy.ndarray,linux“更多”类似于python中的代码?

python:在numpy.ndarray中返回最小值

TypeError:'numpy.ndarray'对象在我的代码中不可调用

NumPy Ndarray对象

Numpy Ndarray 对象