【问题标题】:Assigning elements in a numpy array of zeros在一个 numpy 零数组中分配元素
【发布时间】:2020-07-10 02:04:22
【问题描述】:

我试图通过将某些行和列分配给 255 在 numpy 数组 np.zeros((28, 28)) 上绘制一个“一”。我编写了以下代码:

one = np.zeros((28, 28))
one[12:15][5:23] = 255

在此之后我得到的输出是一个简单的零数组,没有任何变化。谁能解释一下这种奇怪的行为?

奖金

如果您交换 [12:15][5:23],第 17 到 19 行将填充 255。

【问题讨论】:

  • 我能问一下您实际上想用这段代码做什么吗?
  • 我并没有做任何严肃的事情,只是想创建自己独特的数字来了解神经网络的工作原理。
  • 已更新以解决您的编辑问题

标签: python python-3.x numpy


【解决方案1】:

使用one[12:15][5:23],您首先选择第 12 到 15 行(3 行),然后从这 3 行中选择第 5 到 23 行。这些行不存在,那么您无需更新任何内容。

更新第 12 到 15 行与第 5 到 23 列交叉的语法是

one[12:15,5:23] = 255

【讨论】:

  • 为什么?语法根本不是无效的。了解为什么一个有效而另一个无效比仅仅插入它更重要。
  • one[12:15] 选择行从12 到15,然后你得到3 行。然后添加[5:23] 以从这 3 行中选择第 5 到 23 行。这些行不存在,那么您无需更新任何内容。更新第 12 到 15 行与第 5 到 23 列交叉的语法是 one[12:15,5:23]
  • 如果有人得到答案,请在此处发布。
  • 我上一条评论中有什么不明白的地方?
  • one[12:15,5:23] 预定义的还是numpy的?每个 [ ] 表示选择一个新的行和列对?
【解决方案2】:

扩展 jpl 的答案:如果您正在处理 python 的列表数据结构,您的语法将是正确的。但是您正在处理 numpy 的 ndarray 数据结构,所以它不是并且 jpl 语法是正确的。

【讨论】:

  • 语法完全有效。为什么它不起作用?
  • 它不起作用,因为它是在一个 numpy 数组上操作,因此是无效的,如果它是在一个 python 列表上操作,它将是有效的。
  • x[slice1][slice2] 适用于列表和数组。 Python 计算temp=x[slice1],然后是temp1 = temp[sllice2]。列表的切片仍然是列表;数组的切片具有相同的维数。 x[i][j] 标量索引是不同的,在每一步都会减少嵌套或维度。
【解决方案3】:

您使用的符号是有效的,但所做的事情与您所期望的完全不同。 Numpy 索引由元组组成,每个维度一个元素。您尝试获取的索引如下所示

one[(12:15, 5:23)] = 255

为了方便,python允许你去掉括号,所以几乎每个人都会写

one[12:15, 5:23] = 255

记住这只是包含切片对象的元组的简写是很有用的,因为有时您必须在外部构建它。

让我们看看您的原始索引实际上做了什么。 python 中的每个括号表达式都是对__getitem____setitem__ 的调用。您的索引可以重写为

view = one[12:15]  # __getitem__
view[5:23] = 255   # __setitem__

你可以传入一个比维数短的元组。在这种情况下,前导维度被索引,所有剩余维度被隐式抓取。这实际上意味着您正在有效地做事

view = one[12:15, :]
view[5:23, :] = 255

view 是第 12-14 行的切片,包括第 12-14 行。它是一个 3x28 数组。为了与 python 约定保持一致,numpy 允许您分配给数组末尾之后的索引,而默默地什么也不做。 view 只有 3 行,因此分配第 5-22 行没有任何作用。

希望这能让您的编辑情况变得清晰。如果你抓取第 5-22 行,你会得到一个 18x28 的 ones 切片,偏移 5 行。该切片有 12-14 行,因此您最终在原始数组中设置了第 12+5、13+5 和 14+5 行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 2018-01-27
    • 2017-05-08
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    相关资源
    最近更新 更多