【发布时间】:2021-02-15 23:27:48
【问题描述】:
我正在尝试使用以下命令替换/覆盖数组中的值:
import numpy as np
test = np.array([[4,5,0],[0,0,0],[0,0,6]])
test
Out[20]:
array([[4., 5., 0.],
[0., 0., 0.],
[0., 0., 6.]])
test[np.where(test[...,0] != 0)][...,1:3] = np.array([[10,11]])
test
Out[22]:
array([[4., 5., 0.],
[0., 0., 0.],
[0., 0., 6.]])
但是,正如在 Out22 中看到的那样,数组 test 并没有被修改。所以我的结论是不可能简单地覆盖数组的一部分或几个单元格。
尽管如此,在其他情况下,可以覆盖数组的几个单元格。例如,在下面的代码中:
test = np.array([[1,2,0],[0,0,0],[0,0,3]])
test
Out[11]:
array([[1., 2., 0.],
[0., 0., 0.],
[0., 0., 3.]])
test[test>0]
Out[12]:
array([1., 2., 3.])
test[test>0] = np.array([4,5,6])
test
Out[14]:
array([[4., 5., 0.],
[0., 0., 0.],
[0., 0., 6.]])
因此,我的 2 个问题:
1- 为什么第一个命令
test[np.where(test[...,0] != 0)][...,1:3] = np.array([10,11])
不允许修改数组 test ?为什么它不允许访问数组单元并覆盖它们?
2- 考虑到我的代码需要使用上面的命令选择单元格,我该如何让它工作?
非常感谢!
【问题讨论】:
-
test[where...]步骤会进行复制。以下[...]=...修改了该副本,而不是原始文件。view传递更改,但不传递副本。
标签: python arrays numpy overwrite