子数组通过单个替换影响主数组,但矢量化时不影响主数组

2024-10-05 10:45:36 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么子数组通过个别替换影响主数组,而矢量化时不影响主数组?你知道吗

例如,如果代码是:

import numpy as np

Z =np.array( 
    [[0,4,0,0,0,0],
     [0,0,0,1,0,0],
     [0,1,0,1,0,0],
     [0,0,1,1,0,0],
     [0,0,0,0,0,0],
     [0,0,0,0,0,0]])
print Z

X= Z[1:4,0:3]
X[0][0]=9
print X
print Z  #<=== X affects Z
X=X*3+1
print X
print Z  #<=== X do not affect Z

Tags: 代码importnumpyasnpnot数组array
3条回答

X = X * 3 + 1不会修改原始数组,因为它不会就地修改X。你知道吗

想象一下:

Y = X * 3 + 1

你不会认为这会改变原来的数组吧?X = X * 3 + 1是同一种表达式。它不会改变X本身,它只是将局部变量X的值更改为一个全新的数组。你知道吗

如果要修改原始阵列,可以执行以下操作:

X *= 3
X += 1

这将在X的内部操作,因此会改变Z。你知道吗

正如Ashwini Chaudhary提到的,切片Numpy数组返回原始数组的视图,但是当您运行X=X*3+1时,X不再是Z的视图,X的引用被更改,因此即使之后运行X*=3也不会更改Z

这是因为切片Numpy数组会返回原始数组的视图,因此修改它也会影响原始数组。你知道吗

docs

All arrays generated by basic slicing are always views of the original array.

相关问题 更多 >

    热门问题