首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的粗体构造忽略元组解构?

为什么我的粗体构造忽略元组解构?
EN

Stack Overflow用户
提问于 2020-12-01 00:23:12
回答 1查看 127关注 0票数 3

编辑:让我澄清原始帖子中的神秘变量。

赋值一些变量

代码语言:javascript
复制
WHITE = 0 #UP
BLUE = 1 #DOWN
ORANGE = 2 #LEFT
GREEN = 3 #FRONT
RED = 4 #RIGHT
YELLOW = 5 #BACK

首先,我创建一个简陋的矩阵:

代码语言:javascript
复制
cube = np.array([
        np.array([
          np.array([WHITE, WHITE, WHITE]),np.array([WHITE, WHITE, WHITE]), np.array([WHITE, WHITE, WHITE])
        ]),
        np.array([
         np.array([BLUE, BLUE, BLUE]), np.array([BLUE, BLUE, BLUE]), np.array([BLUE, BLUE, BLUE])
        ]),
        np.array([
         np.array([ORANGE, ORANGE, ORANGE]), np.array([ORANGE, ORANGE, ORANGE]), np.array([ORANGE, ORANGE, ORANGE])
        ]),
        np.array([
         np.array([GREEN, GREEN, GREEN]), np.array([GREEN, GREEN, GREEN]), np.array([GREEN, GREEN, GREEN])
        ]),
        np.array([
         np.array([RED, RED, RED]), np.array([RED, RED, RED]), np.array([RED, RED, RED])
        ]),
        np.array([
         np.array([YELLOW, YELLOW, YELLOW]), np.array([YELLOW, YELLOW, YELLOW]), np.array([YELLOW, YELLOW, YELLOW])
        ])
      ])

np.arrays是我调试的尝试之一。

接下来,我尝试用元组解构来交换列、行等:

代码语言:javascript
复制
rubiks[LEFT][:,2], rubiks[DOWN][0] = rubiks[DOWN][0], rubiks[LEFT][:,2]

结果就好像它是迭代地应用的:

代码语言:javascript
复制
[[1 1 1]
  [1 1 1]
  [1 1 1]]

 [[2 2 1]
  [2 2 1]
  [2 2 1]]

它应该是:

代码语言:javascript
复制
[[2 2 2]
  [1 1 1]
  [1 1 1]]

 [[2 2 1]
  [2 2 1]
  [2 2 1]]

我想我误解了什么,但这不应该像预期的那样交换值吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-01 00:40:54

右侧的切片生成引用(或numpy术语中的“视图”)。如果强制复制,则可以得到预期的行为。

代码语言:javascript
复制
import numpy as np
a = np.array([1, 2])
a[:1], a[1:] = a[1:], a[:1]
print(a) # [2 2]

import numpy as np
a = np.array([1, 2])
a[:1], a[1:] = a[1:].copy(), a[:1].copy()
print(a) # [2 1]

多变量赋值本质上是一个元组包装和解压.赋值表达式右侧的Numpy片在右侧元组生成时只提供引用,而不是副本。当第二个赋值生效时,a的底层存储已经被修改。

https://numpy.org/doc/stable/reference/arrays.indexing.html#basic-slicing-and-indexing

通常,避免计算出是否一个numpy片会自动成为一个副本。在逻辑上有必要时,请抄一份。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65083052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档