【问题标题】:Save all values of a variable (in a loop) in another variable in Python将变量的所有值(在循环中)保存在 Python 中的另一个变量中
【发布时间】:2017-06-29 18:31:15
【问题描述】:

我有一个代码通知文件夹,其中包含n 图像,该代码应返回相对频率直方图。

从那里我有一个函数调用:

for image in total_images:
    histogram(image)

其中image 是代码正在处理的当前图像,total_images 是它在之前通知的文件夹中的图像总数 (n)。

然后我调用histogram() 函数,将代码正在运行的当前图像作为参数发送。

我的histogram()函数的目的是返回每张图像的相对频率的直方图(rel_freq)。

虽然返回值是正确的,但rel_freq应该是一个1x256位置的数组,范围从0到255。

如何将 rel_freq 变量转换为 1x256 数组?并且每个值都存放在其对应的位置?

当我执行 len *rel_freq) 时,它返回 256,那时我意识到它不是我需要的格式...

再一次,虽然返回的数据是正确的……

之后,我需要创建一个数组store_all = len(total_images)x256来保存所有rel_freq...

我需要将所有rel_freq 保存在一个数组中,以便以后将其保存到一个外部文件中,例如.txt。

我正在考虑创建另一个函数来执行此操作...

类似的东西,但我不知道如何正确地做,但我相信你会明白其中的逻辑......

def store_all_histograms(total_images):
    n = len(total_images)

    store_all = [n][256]

    for i in range(0,n):
        store_all[i] = rel_freq

我知道函数store_all_histograms() 是错误的,我只是在这里写它以或多或少地显示我正在考虑的方式......但同样,我不知道如何正确地做到这一点......在此时,我得到的错误是:

    store_all = [n][256]
IndexError: list index out of range

毕竟,我需要store_all 变量来保存所有相对频率直方图,例如:

position:     0   ...  256 
store_all = [
            [..., ..., ...],
            [..., ..., ...],
            .
            .
            .
            n
            ]

现在跟随这段代码:

def histogram(path):
    global rel_freq

    #Part of the code that is not relevant to the question...

    rel_freq = [(float(item) / total_size) * 100 if item else 0 for item in abs_freq]

def store_all_histograms(total_images):
    n = len(total_images)

    store_all = [n][256]

    for i in range(0,n):
        store_all[i] = rel_freq

#Part of the code that is not relevant to the question...

# Call the functions
for fn in total_images:
    histogram(fn)

    store_all_histograms(total_images)

我希望我已经弄清楚了这个问题。

提前谢谢,如果您需要任何其他信息,可以问我...

【问题讨论】:

  • “当我执行 len (rel_freq) 时它返回 256,那时我意识到它不是我需要的格式...”你对 1x256 数组有什么期望? len 是一个 python 内置函数。
  • 欢迎堆栈溢出。较长的问题不一定比简短的问题好。我很难理解你的问题的重要部分是什么。这是写好问题的指南:How to Ask
  • @roganjosh 我需要这个,因为我稍后会将直方图的值放入多层感知器中,看看它是否能够对我的图像进行分类。
  • @HåkenLid 谢谢和抱歉。
  • 没关系。我可能不清楚; 1x256 数组的len 将只显示256,因此即使它是numpy 数组,len 也会将其视为(必要时嵌套,它不在这里)列表。这并不表示出现任何问题。正如@HåkenLid 所说,您的问题很长,这是我提出的第一个问题。

标签: python arrays python-2.7 list


【解决方案1】:

返回结果,不要使用全局变量:

def histogram(path):
    return [(float(item) / total_size) * 100 if item else 0 for item in abs_freq]

创建一个空列表:

store_all = []

并附加您的结果:

for fn in total_images:
    store_all.append(histogram(fn))

或者,使用列表推导:

store_all = [histogram(fn) for fn in total_images]

【讨论】:

    【解决方案2】:
    for i in range(0,n):
        store_all[i+1] = rel_freq
    

    试试这个?如果我说实话,我对这个问题有点困惑。您是否尝试将所有项目的数组调用方式改变 1,以便通过 list[1] 调用而不是通过 list[0] 调用位置 1?

    所以你想让它表现得像这样?

    >>list = [0,1,2,3,4]
    >>list[1]
    0
    

    【讨论】:

    • >>list = [[0,0,0,0,...,0,0,0,0], [1,1,1,1,...,1,1,1,1], [2,2,2,2,...,2,2,2,2]] >>list[3] >>[2,2,2,2,...,2,2,2,2] 这就是我需要的...
    猜你喜欢
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多