Numpy array 多次slice切片的问题,赋值影响最近的一层切片

问题
numpy 的 array在使用切片赋值的时候,使用两次切片操作,虽然输出中间结果都是对的,但是最终赋值的结果没有改变原数组。

举个例子:

import numpy as np
A = np.ramdom.random((4,3))
print(A)
# 返回
array([[0.26924955, 0.70513781, 0.56708875],
       [0.20262569, 0.22664672, 0.63901124],
       [0.38433578, 0.03653372, 0.20559075],
       [0.39735781, 0.77549601, 0.17549077]])
x = np.array([1.0,2.0,3.0,4.0]).reshape(-1,1)
x
# 输出:
array([[1.],
       [2.],
       [3.],
       [4.]])


A[:,[0,1]][:,0:1]=x
A
# 输出结果为:
array([[0.26924955, 0.70513781, 0.56708875],
       [0.20262569, 0.22664672, 0.63901124],
       [0.38433578, 0.03653372, 0.20559075],
       [0.39735781, 0.77549601, 0.17549077]])

两次slice操作之后赋值不会影响到原数数组,其实是是只影响最近的一次切片操作。

a = A[:,[0,1]]
a
# 输出结果为:
array([[0.26924955, 0.70513781],
       [0.20262569, 0.22664672],
       [0.38433578, 0.03653372],
       [0.39735781, 0.77549601]])
      
a[:,0:1]=x
a
# 输出结果为:
array([[1.        , 0.70513781],
       [2.        , 0.22664672],
       [3.        , 0.03653372],
       [4.        , 0.77549601]])

# 来看看A,不为所动
A
array([[0.26924955, 0.70513781, 0.56708875],
       [0.20262569, 0.22664672, 0.63901124],
       [0.38433578, 0.03653372, 0.20559075],
       [0.39735781, 0.77549601, 0.17549077]])

所以我就一步步的赋值就好了,先把A切出来,作为一个临时变量,被切出部分赋完值再赋值回去就行。

a = A[:,[0,1]]
a[:,0:1]=x
A[:,[0,1]]=a
A
# 输出A看看:
array([[1.        , 0.70513781, 0.56708875],
       [2.        , 0.22664672, 0.63901124],
       [3.        , 0.03653372, 0.20559075],
       [4.        , 0.77549601, 0.17549077]])

猜你喜欢

转载自blog.csdn.net/Papageno_Xue/article/details/84196368