【问题标题】:Saving to an empty array of arrays from nested for-loop从嵌套的 for 循环保存到一个空数组数组
【发布时间】:2018-04-13 00:46:18
【问题描述】:

我有一个用零填充的数组,所以这是我想要的结果形状。

我无法将嵌套的 for 循环保存到这个数组数组中。换句话说,我想用最后一行计算的值替换所有的零。

percent = []
for i in range(len(F300)):
    percent.append(np.zeros(lengths[i]))

for i in range(0,len(Name)):
    for j in range(0,lengths[i]):
        percent[i][j]=(j+1)/lengths[i]

最后一行只保存每个 i 的最后一个 j 值。

我明白了:

percent = [[0,0,1],[0,1],[0,0,0,1]]

但我想要:

percent = [[.3,.6,1],[.5,1],[.25,.5,75,1]]

【问题讨论】:

  • 在开始时尝试:from __future__ import division
  • 已经迁移到 python 3
  • @percusse 我不能代表dontdeimos,但是我用来开发软件的 Maya 集群仍然在 Canopy Python 2 上运行,并且维护它的 HPCF 无意升级任何时间很快。因此,像我这样的用户在设计一切时都必须考虑到跨版本的兼容性。有时你必须使用你得到的东西。
  • @ErickShepherd 两年后,这种争论有望消失。
  • @percusse 手指交叉。当他们最终升级时,它将为我节省大量打字和相当多的头疼。

标签: arrays python-2.7 numpy for-loop


【解决方案1】:

这段代码的问题在于,因为它在 Python 2.7 中,/ 运算符正在执行“经典”除法。在 Python 2.7 中有几种不同的方法可以解决这个问题。一种方法是将被划分的数字转换为浮点数:

import numpy as np

lengths = [3, 2, 4] # Deduced values of lengths from your output.
percent = []

for i in range(3): # Deduced size of F300 from the length of percent.

    percent.append(np.zeros(lengths[i]))

for i in range(0, len(percent)):

    for j in range(0, lengths[i]): #

        percent[i][j] = float(j + 1) / float(lengths[i])

另一种方法是从 __future__ 包中导入 division。但是,此导入行必须是代码中的第一条语句。

from __future__ import division
import numpy as np

lengths = [3, 2, 4] # Deduced values of lengths from your output.
percent = []

for i in range(3): # Deduced size of F300 from the length of percent.

    percent.append(np.zeros(lengths[i]))

for i in range(0, len(percent)):

    for j in range(0, lengths[i]):

        percent[i][j] = (j + 1) / lengths[i]

第三种方法,也是我个人更喜欢的方法,是充分利用 NumPy 的内置函数:

import numpy as np

lengths = [3, 2, 4] # Deduced values of lengths from your output.
percent = np.array([np.linspace(1.0 / float(l), 1.0, l) for l in lengths])

所有这三种方法都将生成具有以下值的numpy.ndarray 对象的list(或在最后一种情况下为numpy.ndarray 对象):

[[0.33333333, 0.66666667, 1.], [0.5, 1.], [0.25, 0.5, 0.75, 1.]]

【讨论】:

  • 哇,非常感谢。我不敢相信这是 python 2.7 的一个小问题。 python 3中的{/}有什么不同吗?
  • @dontdeimos 是的,在 Python 3 中,/ 运算符返回两个数字相除的浮点商,无论它们是 int 类型、float 类型还是某种组合其中。然而,在 Python 2 中,/ 执行“经典”除法,这对于 int 值是模运算的伙伴(通过 % 运算符):/ 给出多少次 int 分母除以int 分子,其商也是int% 得到int 余数,非常类似于小学长除法中的商和余数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-03
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 2020-03-25
  • 2021-10-23
相关资源
最近更新 更多