Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python试图更新2D numpy数组中的值,但值不';t更新_Python_Arrays_Numpy - Fatal编程技术网

Python试图更新2D numpy数组中的值,但值不';t更新

Python试图更新2D numpy数组中的值,但值不';t更新,python,arrays,numpy,Python,Arrays,Numpy,对不起,我是个巨蟒迷 我一直在试图找到代表x,y值的二维数组中的最大值 然后,应将最大值替换为0并绘制。然而,我已经尝试了许多方法来替换值,但我无法替换值 到目前为止,我的代码是 m2= [ [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] , [ 0 , 1 , 2 , 3 , 2 , 1 , 0 , 1 , 2 , 3 ]] a2 = np.array(m2, dtype=np.int) plt.plot(a2[0,:], a2[1,:], 'r-x')

对不起,我是个巨蟒迷

我一直在试图找到代表x,y值的二维数组中的最大值

然后,应将最大值替换为0并绘制。然而,我已经尝试了许多方法来替换值,但我无法替换值

到目前为止,我的代码是

m2= [ [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] , [ 0 , 1 , 2 , 3 , 2 , 1 , 0 , 1 , 2 , 3 ]]

a2 = np.array(m2, dtype=np.int)

plt.plot(a2[0,:], a2[1,:], 'r-x')

a2maxy = np.max(a2[1,:])
print("a2 y values: ", a2[1,:])

for y in (a2[1,:]):
    if (y==a2maxy):
        print(y)
        print("max found ", y)
        y=0
        print(y)
但是我的输出(显示最大y值不变)是

a2 y values:  [0 1 2 3 2 1 0 1 2 3]
3
max found  3
0
3
max found  3
0
[[0 1 2 3 4 5 6 7 8 9]
 [0 1 2 3 2 1 0 1 2 3]]

我认为您的问题在于,您实际上没有在
for
循环中引用要编辑的值数组。可能有一种更巧妙的方法可以做到这一点,但您可以在
for
循环中作为迭代器来做您想做的事情,然后在
a2
数组中引用您关心的项,如下所示:

import numpy as np
from matplotlib import pyplot as plt
m2= [ [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] , [ 0 , 1 , 2 , 3 , 2 , 1 , 0 , 1 , 2 , 3 ]]

a2 = np.array(m2, dtype=np.int)

plt.plot(a2[0,:], a2[1,:], 'r-x')

a2maxy = np.max(a2[1,:])
print("a2 y values: ", a2[1,:])

for idx,y in enumerate(a2[1,:]):
    if (y==a2maxy):
        print("max found ", y)
        a2[1,idx]=0

print("new a2 y values: ", a2[1,:])
现在输出为:

a2 y values:  [0 1 2 3 2 1 0 1 2 3]
max found  3
max found  3
new a2 y values:  [0 1 2 0 2 1 0 1 2 0]

@lydiash给出的答案是正确的。但是,由于您是numpy的新手,我还想给您一些关于使用numpy的意义的见解:)

让我们稍微简化一下代码。我看到
a2
包含绘图的所有数据。但第一行表示
x
值,仅用于打印,并且您仅使用实际的
y
值。所以,让我们把他们分开

xs=np.arange(10)#精确地给出[0,1,2,3,4,5,6,7,8,9]
ys=np.数组([0,1,2,3,2,1,0,1,2,3])
plt.绘图(xs,ys,'r-x')
打印(f'y值:{ys}')#打印“y值:[01 2 3 2 1 0 1 2 3]”
在第二部分中,您将查找max
y
值并将其更改为零。当然,您可以在
for
循环中完成。但是你也可以利用numpy向量运算的威力

当您使用
y\u max=np.max(ys)
(也可以写成
y\u max=ys.max()
)计算最大值时,您可以在一个跃点内直接更改
ys

y_max=ys.max()
打印(f'max value found:{y_max}')#打印“max value found:3”
ys[ys==y_max]=0#这里发生了最大值变为零的情况!
print(f'newy-values:{ys}')#打印“newy-values:[0112021120]”
表达式
ys==y_max
ys
的所有索引上都是一个过滤器-只取匹配值的索引


可选说明:如果您想更好地理解
ys==y_max
零件,只需打印它给出的内容:

print(ys==y\u max)
#打印“[假假假假假真]”
#如您所见,`True`值正好位于最大值的位置

它为您提供了数组所有索引的掩码。您可以将其进一步用作某种过滤器-
ys[mask]
只返回由该
掩码过滤的值

非常感谢您花时间解释:),我曾经尝试过np.where方法,但没有得到任何结果。where有点棘手,因为它根据您提供的参数数量做了两件稍有不同的事情-在您习惯numpy之前,我不建议您使用它。总的来说,numpy的每个功能都有大量的文档——请不要害羞地看它们)非常感谢您花时间回答这个问题,我现在明白我错在哪里了:)