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]])
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值