修改 python 中子数组的值
Modifying values of a sub-array in python
我想修改 Python 中子数组的值,但它无法按照我希望的方式工作。这是一个例子,首先让我们考虑 numpy 数组:
A = np.reshape(np.arange(25),(5,5))
和
B = np.ones((2,3))
如果我们检查 A 的值,我们得到:
>>> A
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
我想在 A 中替换子数组的值
A[:,[1,3,4]][[1,3],:]
根据 B 的值。所以我正在做的是:
A[:,[1,3,4]][[1,3],:] = B
我想得到:
>>> A
array([[ 0, 1, 2, 3, 4],
[ 5, 1, 7, 1, 1],
[10, 11, 12, 13, 14],
[15, 1, 17, 1, 1],
[20, 21, 22, 23, 24]])
但是 A 的值不会用这种方法改变。当然我可以用循环逐个元素地做,但问题是我想用 16000*16000 矩阵来做这个,所以我正在寻找一种不使用循环的方法。你能帮帮我吗?
任何帮助将不胜感激:)
这是一个令人困惑的案例。发生的事情是
A[:, [1,3,4]]
索引到 A
,创建一个包含 A
的第 1、3 和 4 列的新数组。下一个表达式 [[1, 3], :]
索引该临时数组的行并设置它的值。
要正常工作,您需要为同一表达式中的列和行编制索引。但是,如果您尝试这样做,它会引发错误
A[[1,3], [1,3,4]] = B ## Not working!
发生的事情是 numpy 将列表解释为坐标对,这不是我们在这里想要的(有关详细信息,请参阅 https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html。如果您想充分利用 numpy,这是必不可少的阅读)。幸运的是,numpy
为这种情况提供了 ix_
方法。它采用表示行和列的列表,并创建可用作索引的内容。
>>> A[np.ix_([1,3],[1,3,4])] = B
>>> A
array([[ 0, 1, 2, 3, 4],
[ 5, 1, 7, 1, 1],
[10, 11, 12, 13, 14],
[15, 1, 17, 1, 1],
[20, 21, 22, 23, -1]])
我想修改 Python 中子数组的值,但它无法按照我希望的方式工作。这是一个例子,首先让我们考虑 numpy 数组:
A = np.reshape(np.arange(25),(5,5))
和
B = np.ones((2,3))
如果我们检查 A 的值,我们得到:
>>> A
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
我想在 A 中替换子数组的值
A[:,[1,3,4]][[1,3],:]
根据 B 的值。所以我正在做的是:
A[:,[1,3,4]][[1,3],:] = B
我想得到:
>>> A
array([[ 0, 1, 2, 3, 4],
[ 5, 1, 7, 1, 1],
[10, 11, 12, 13, 14],
[15, 1, 17, 1, 1],
[20, 21, 22, 23, 24]])
但是 A 的值不会用这种方法改变。当然我可以用循环逐个元素地做,但问题是我想用 16000*16000 矩阵来做这个,所以我正在寻找一种不使用循环的方法。你能帮帮我吗?
任何帮助将不胜感激:)
这是一个令人困惑的案例。发生的事情是
A[:, [1,3,4]]
索引到 A
,创建一个包含 A
的第 1、3 和 4 列的新数组。下一个表达式 [[1, 3], :]
索引该临时数组的行并设置它的值。
要正常工作,您需要为同一表达式中的列和行编制索引。但是,如果您尝试这样做,它会引发错误
A[[1,3], [1,3,4]] = B ## Not working!
发生的事情是 numpy 将列表解释为坐标对,这不是我们在这里想要的(有关详细信息,请参阅 https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html。如果您想充分利用 numpy,这是必不可少的阅读)。幸运的是,numpy
为这种情况提供了 ix_
方法。它采用表示行和列的列表,并创建可用作索引的内容。
>>> A[np.ix_([1,3],[1,3,4])] = B
>>> A
array([[ 0, 1, 2, 3, 4],
[ 5, 1, 7, 1, 1],
[10, 11, 12, 13, 14],
[15, 1, 17, 1, 1],
[20, 21, 22, 23, -1]])