gpt4 book ai didi

python - 如何将 numpy 子矩阵 View 数组 d 表示为一维矩阵而不是二维矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 13:03:28 24 4
gpt4 key购买 nike

这是使用 numpy。这里有一些有趣的东西接近需要的东西;更新子矩阵 View d 可以更新支持矩阵 a:

a = array([[0, 0, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])

print a

array([[0, 0, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])

d = a[1:4,1:4]

print d

array([[0, 1, 0],
[1, 0, 0],
[0, 0, 0]])

d[1,1]=9

print a

array([[0, 0, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 1, 9, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])

太棒了,9 出现在支持数组 a 中,正如我所希望的那样。

好吧,问题来了——现在,如果要求改为将 numpy 子矩阵 View 数组 d 或 d 的某些 View dd 表示为一维矩阵而不是二维矩阵,您如何做到这一点?以下无法做到这一点。

dd = d.reshape(9)

print dd

array([0, 1, 0, 1, 9, 0, 0, 0, 0])

dd[7]=7

print dd

array([0, 1, 0, 1, 9, 0, 0, 7, 0])

print a

array([[0, 0, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 1, 9, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])

我曾希望看到 7 出现在支持数组 a 中。请注意,没有要求将 d 子矩阵 View 限制为二维 - 首先 d 子矩阵 View 的一维定义将是一个完美的公式如果存在这样的事情。

最佳答案

我想你可能会找到 flat方法有用。作为jterrace已经指出,d 使用的内存不是连续的,因此 d 不能以通常的方式 reshape 。但是,flat 方法不返回数组——它返回一个 numpy.flatiter。 object,有点像 python 迭代器,但允许索引访问和赋值,就像常规数组一样。

>>> d = a[1:4,1:4]
>>> dd = d.flat
>>> dd[7] = 7
>>> a
array([[0, 0, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 7, 0, 0],
[0, 0, 0, 0, 0]])

关于python - 如何将 numpy 子矩阵 View 数组 d 表示为一维矩阵而不是二维矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11923101/

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