- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在我的代码中,在某些时候我尝试修改掩码数组的值,但 python 似乎忽略了这一点。我认为这与内存存储在数组中的方式有关,就好像我正在修改值的副本而不是值本身一样,但我对此并不精通,不知道如何解决
这是我正在尝试做的事情的简化版本:
x = np.zeros((2,5)) # create 2D array of zeroes
x[0][1:3] = 5 # replace some values along 1st dimension with 5
mask = (x[0] > 0) # create a mask to only deal with the non negative values
x[0][mask][1] = 10 # change one of the values that is non negative
print x[0][mask][1] # value isn't changed in the original array
这个的输出是:
5.0
什么时候应该是 10。
任何帮助将不胜感激,理想情况下这需要是可扩展的(这意味着我不一定知道 x 的形状,或者值在哪里是非负的,或者我需要修改哪个)。
我在 Ubuntu 16.04.2 上的 python 2.7.12 上使用 numpy 1.11.0
谢谢!
最佳答案
让我们概括一下您的问题:
In [164]: x=np.zeros((2,5))
In [165]: x[0, [1, 3]] = 5 # index with a list, not a slice
In [166]: x
Out[166]:
array([[ 0., 5., 0., 5., 0.],
[ 0., 0., 0., 0., 0.]])
当索引发生在 =
之前时,它是 __setitem__
的一部分并作用于原始数组。无论索引使用切片、列表还是 bool 掩码,都是如此。
但是带有列表或掩码的选择会生成一个副本。进一步的索引赋值仅影响该副本,而不影响原始文件。
In [167]: x[0, [1, 3]]
Out[167]: array([ 5., 5.])
In [168]: x[0, [1, 3]][1] = 6
In [169]: x
Out[169]:
array([[ 0., 5., 0., 5., 0.],
[ 0., 0., 0., 0., 0.]])
解决此问题的最佳方法是修改 mask 本身:
In [170]: x[0, np.array([1,3])[1]] = 6
In [171]: x
Out[171]:
array([[ 0., 5., 0., 6., 0.],
[ 0., 0., 0., 0., 0.]])
如果掩码
是 bool 值,您可能需要将其转换为索引数组
In [174]: mask = x[0]>0
In [175]: mask
Out[175]: array([False, True, False, True, False], dtype=bool)
In [176]: idx = np.where(mask)[0]
In [177]: idx
Out[177]: array([1, 3], dtype=int32)
In [178]: x[0, idx[1]]
Out[178]: 6.0
或者你可以直接调整 bool 值
In [179]: mask[1]=False
In [180]: x[0,mask]
Out[180]: array([ 6.])
因此,在您的大问题中,您需要注意何时索引会生成一个 View 并且它是一个副本。您需要熟悉列表、数组和 bool 值的索引,并了解如何在它们之间切换。
关于python - 如何更改 numpy 中屏蔽数组的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43921510/
我需要创建一个 View (作为其他 View 的 mask ) 。圆圈是透明的,外部区域是半透明的。我可以使用 canvas.clipRegion(..) 来实现它,但是 http://develo
踏入爬虫的迷宫 多年以来,我一直是一个对编程充满了好奇心的人。探索着代码的世界,便如同探险家踏入密林深处,寻找未知的宝藏。最近,我将目光聚焦在了爬虫技术上,特别是百度搜索屏蔽问题上。 百度搜索的诱惑
我想将“www.adomain.com”重定向到“www.adomain.com/cms”。 cms 部分应该被屏蔽。 我无法让它安静地工作。因此“cms”始终是网址的一部分。 我尝试了这个解决方案:
我一直在我的 View Controller 中使用以下代码: UIView *view = [[CustomView alloc] init]; UIView *mask = [[CustomMas
如果是网页内容里面的alert,我们可以等网页加载完毕,也就是在webViewDidFinishLoad中执行下面的js代码,就可以屏蔽alert了
我正在使用 PyQt4 QLineEdit小部件接受密码。有一个setMasking属性,但不遵循如何设置屏蔽字符。 最佳答案 editor = QLineEdit() editor.setEchoM
我有一个包含员工信息的 Pandas 数据框,如下所示: df=pd.DataFrame({ 'Id':[1,2,3,4], 'Name':['Joe','Henry','Sam','
我正在为 iPhone 创建一个自定义开/关切换开关(类似于标准开关),并且我正在设置 slider 的蒙版,但调用 [[myView [layer] setMask:maskLayer] 设置
我如何能够在 Objective C 中屏蔽 nsimageview?例如,有一个带圆角的 nsimageview。 最佳答案 你不知道。如果你想以 NSImageView 不支持的方式绘制图像,则需
我正在开发一个可以更改边框或矩形 UIImage 的应用程序。边框会有所不同,但看起来 UIImage 是用剪刀剪掉的,或者有什么影响。 做到这一点的最佳方法是什么? 我的第一个想法是准备一堆具有我正
我需要屏蔽数据,就像在 Azure Pipelines 中一样,但位于 Azure 存储库文件内。有没有一种方法可以设置与脚本分开存储的变量,例如在 Azure 管道中: variable = $(S
我没有找到解决问题的简单方法。我想使用 TextInputDialog,您必须在其中键入用户密码,以重置数据库中的所有数据。 TextInputDialog 的问题是它没有屏蔽文本,我不知道有什么选择
我正在寻找一种自行开发的方法来扰乱生产数据以用于开发和测试。我已经构建了几个脚本来生成随机社会安全号码、轮类出生日期、打乱电子邮件等。但我在尝试打乱客户姓名时遇到了困难。我想保留真实姓名,这样我们仍然
我正在尝试使用过滤器来屏蔽 SSN 的前 5 位数字,它应该看起来像这样 XXX-XX-1234 到目前为止我想出了什么: // {{SocialSecurityNumber | ssn}} angu
我没有找到解决问题的简单方法。我想使用 TextInputDialog,您必须在其中键入用户密码,以重置数据库中的所有数据。 TextInputDialog 的问题是它没有屏蔽文本,我不知道有什么选择
我想屏蔽一个 Fortran 数组。这是我目前正在做的方式...... where (my_array <=15.0) mask_array = 1 elsewhere mask_ar
当用户在用户界面上输入时,我需要屏蔽数字,用户应该看到一个屏蔽的数字,但在 Java 代码上,我应该得到整个数字,包括屏蔽的字符用户应该看到什么 4545********9632但在 Java 代码(
我正在使用 javafx 文本字段。我需要输入数字以及应符合格式 ###.###.###.### 的小数其中小数点根本不可编辑,数字可以是任何数字;不允许其他输入。并非所有数字占位符都需要填写,例如它
我必须交付一个小型 C++ 软件。我想用一些实现(我使用了表达式模板)来掩盖头文件,以使最终用户难以辨认,因此他们无法修改它们。我无法将代码包含在静态或动态库中。有什么方法可以屏蔽头文件的内容吗? 谢
我正在开发一个与 gestureRecognizer 配合使用的应用程序。 使用手势可以选择 UIImage(例如 rectangle.png),并且可以使用 UIPopoverView 通过为所选图
我是一名优秀的程序员,十分优秀!