我想读取一个.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)
问题是您正在尝试将两个以上的值分配给两个变量:
>>> 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]
希望这有帮助
np.indices
返回代表网格索引的数组。错误基本上表明通过调用indices
方法获得了2个以上的值。由于它正在返回网格,因此您可以将其分配给grid
等变量,然后相应地访问索引。
错误的关键是函数调用返回不仅仅是2个值,在您的代码中,您试图将它们"挤压"到2个变量中。
例如
s = "this is a random string"
x, y = s.split()
上面的代码给您一个值错误,因为我通过调用split()
获得了5个字符串,而我试图将它们容纳到2个变量中。