gpt4 book ai didi

python - 如何使用 NumPy.recarray 的两个 View 修改它

转载 作者:行者123 更新时间:2023-12-01 00:00:45 24 4
gpt4 key购买 nike

我是 Python 和 Numpy 的新手,我面临一个问题,即在应用于屏蔽 View 时无法修改 numpy.recarray。我从文件中读取记录,然后创建两个屏蔽 View ,然后尝试修改 for 循环中的值。这是示例代码。

import numpy as np
import matplotlib.mlab as mlab


dat = mlab.csv2rec(args[0], delimiter=' ')
m_Obsr = dat.is_observed == 1
m_ZeroScale = dat[m_Obsr].scale_mean < 0.01


for d in dat[m_Obsr][m_ZeroScale]:
d.scale_mean = 1.0

但是当我打印结果时

newFile = args[0] + ".no-zero-scale"

mlab.rec2csv(dat[m_Obsr][m_ZeroScale], newFile, delimiter=' ')

文件中的所有scale_means仍然为零。

我一定做错了什么。是否有修改值的正确方法看法?是因为我将两个 View 一一应用吗?

谢谢。

最佳答案

我认为您对“屏蔽 View ”这个术语有误解,应该(重新)阅读The Book (现已免费下载)以阐明您的理解。

我引用第 3.4.2 节:

Advanced selection is triggered when the selection object, obj, is a non-tuple sequence object, an ndarray (of data type integer or bool), or a tuple with at least one sequence object or ndarray (of data type integer or bool). There are two types of advanced indexing: integer and Boolean. Advanced selection always returns a copy of the data (contrast with basic slicing that returns a view).

您在这里所做的是高级选择( bool 类型),因此您将获得一个副本,并且永远不会将其绑定(bind)到任何地方 - 您在副本上进行更改,然后让它消失,然后编写一个来自原始版本的新副本。

一旦您了解了问题,解决方案就应该很简单:制作一次副本,对该副本进行更改,然后编写相同的副本。即:

dat = mlab.csv2rec(args[0], delimiter=' ')
m_Obsr = dat.is_observed == 1
m_ZeroScale = dat[m_Obsr].scale_mean < 0.01
the_copy = dat[m_Obsr][m_ZeroScale]

for d in the_copy:
d.scale_mean = 1.0

newFile = args[0] + ".no-zero-scale"
mlab.rec2csv(the_copy, newFile, delimiter=' ')

关于python - 如何使用 NumPy.recarray 的两个 View 修改它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1055131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com