在Python中读取像素:“ValueError: 值过多无法解包”
我想读取一个.tif格式的文件,计算图像中的像素数量,并确定物体的密度。但是当我尝试使用 y, x = np.indices(image.shape)
这行代码时,出现了问题。
Value Error (ValueError: too many values to unpack, File "<stdin>", line 1, in <module>).
我的代码如下:
import sys
import os
import numpy as np
from pylab import *
import scipy
import matplotlib.pyplot as plt
import math
#Function
def radial_plot(image):
y, x = np.indices(image.shape) # <----- Problem here???
center = np.array([(x.max()-x.min())/2.0, (x.max()-x.min())/2.0])
r = np.hypot(x - center[0], y - center[1])
ind = np.argsort(r.flat)- center[1])
r_sorted = r.flat[ind]
i_sorted = image.flat[ind]
r_int = r_sorted.astype(int)
deltar = r_int[1:] - r_int[:-1]
rind = np.where(deltar)[0]
nr = rind[1:] - rind[:-1]
csim = np.cumsum(i_sorted, dtype=float)
tbin = csim[rind[1:]] - csim[rind[:-1]]
radial_prof = tbin / nr
return rad
#Main
img = plt.imread('dat.tif')
radial_plot(img)
2 个回答
0
np.indices
是一个函数,它会返回一个数组,这个数组表示网格的索引。错误的意思是调用 indices
方法时,得到了超过两个的值。因为它返回的是一个网格,所以你可以把它赋值给一个变量,比如 grid
,然后根据需要访问这些索引。
这个错误的关键在于,函数调用返回的不止两个值,而在你的代码中,你试图把这些值“压缩”到只有两个变量里。
举个例子:
s = "this is a random string"
x, y = s.split()
上面的代码会出现值错误,因为调用 split()
时得到了5个字符串,而我试图把它们放进只有两个变量里。
1
问题在于你试图把超过两个值赋给只有两个变量:
>>> a, b = range(2) #Assign two values to two variables
>>> a
0
>>> b
1
>>> a, b = range(3) #Attempt to assign three values to two variables
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
在Python 2.x中,你可以这样做:
>>> a, b = range(3)[0], range(3)[1:]
>>> a
0
>>> b
[1, 2]
为了完整起见,如果你使用的是Python 3.x,你可以使用扩展可迭代解包:
>>> a, *b, c = range(5)
>>> a
0
>>> c
4
>>> b
[1, 2, 3]
希望这能帮到你