【问题标题】:Array not updating values after function call函数调用后数组不更新值
【发布时间】:2019-06-27 21:49:32
【问题描述】:

我需要数组包含我正在生成的(x,y) 坐标的所有可能组合。该数组仍然打印为1s 的数组。

import numpy as np

coordinates = np.ones([1000, 2])

def translate (x,y):
    dx = 5
    dy = 5
    return x + dx, y + dy

for i in range(0, 100):
    for j in range(0, 100):
        (x, y) = translate(i, j)
        coordinates[i, j] = translate(x, y)
        np.append(coordinates, translate(x, y), axis=None)

print(coordinates)

我希望坐标数组在调用 translate 函数后接收正确的值,而不是 1s 的数组。

【问题讨论】:

  • 你的代码给了我错误"ValueError: setting an array element with a sequence." 因为translate 返回元组但数组需要单个数字。
  • 还有其他问题:您创建了大小为 1000x2 的数组,但后来您使用 for 循环,如数组 100x100。这给出了错误"IndexError: index 2 is out of bounds for axis 1 with size 2"
  • 你为什么要给translate()打3次电话?
  • 我只是在尝试什么可行
  • 您没有仔细阅读np.append 文档。这不是列表克隆。

标签: python arrays numpy


【解决方案1】:

如果我理解正确,您想要所有可能的(x,y) 坐标,这些坐标可以通过改变x=0..99y=0..99 然后分别添加一些dxdyxy .

一种方法,类似于你的,是初始化一个空列表,然后用你定义的翻译函数附加一个元组:

coordinates = []

def translate (x,y):
    dx = 5
    dy = 5
    return x + dx, y + dy

for x in range(0, 100):
    for y in range(0, 100):
        coordinates.append(translate(x,y))

print(coordinates)

但是,这可以改进。意识到您只是将dx 添加到每个xdy 到每个y,因此您可以通过删除translate 函数来使用更简单的代码实现相同的结果:

coordinates = []
dx, dy = 5, 5

for x in range(dx, 100+dx):
    for y in range(dy, 100+dy):
        coordinates.append((x,y))

print(coordinates)

这会给你同样的正确答案。

【讨论】:

  • 是的,它有效!谢谢你。但是为什么我的解决方案不起作用?
  • 三个问题:首先,translate 函数返回一个具有两个值的元组,但是您将函数的结果分配给了coordinates[i, j],这是一个值。因此,删除该行。其次,您试图在对np.append 的调用中附加translate(x,y) 而不是translate(i,j)。第三,你错误地使用了np.append,所以没有任何改变,你只是返回了你一开始初始化的1的矩阵。
  • 非常感谢!我认为我使用 np.append 正确,因为我使用的是 numpy 数组而不是列表。
  • np.append 不能“就地”运行。换句话说,它将结果返回给一个新变量。但是,您没有将结果分配给任何东西,因此它丢失了。你会需要像result = np.append(coordinates, translate(x, y)) 这样的东西。更多信息in the documentation.
猜你喜欢
  • 1970-01-01
  • 2022-06-19
  • 1970-01-01
  • 2015-02-03
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多