TypeError: iteration over a 0-d array, using numpy and pydicom
TypeError: iteration over a 0-d array, using numpy and pydicom
我正在尝试创建一个简单的 DICOM 查看器,我在其中使用 matplotlib 绘制图像,我想在 tkinter 中显示相同的图(这是一个 DICOM 图像),但是当我 运行代码我得到这个错误。请帮忙。当我尝试绘制 a 时发生错误,但我相信它与我声明 x、y 和 p
的值的方式有关
import pydicom
import matplotlib
matplotlib.use('TkAgg')
import numpy as np
from matplotlib.backends.backend_tkagg import
FigureCanvasTkAgg
from matplotlib.figure import Figure
from tkinter import *
from pydicom.data import get_testdata_files
filename = get_testdata_files('000000.dcm')
dataset = pydicom.dcmread('000000.dcm')
data = dataset.pixel_array
class mclass:
def __init__(self, window):
self.window = window
self.button=Button(window,text="check",command=self.plot)
self.button.pack()
def plot (self):
if 'PixelData' in dataset:
rows = int(dataset.Rows)
cols = int(dataset.Columns)
y=np.array(rows)
x=np.array(cols)
p=np.array(data)
fig = Figure(figsize=(6,6))
a = fig.add_subplot(111)
a.plot(p, range(2+max(y)))
canvas = FigureCanvasTkAgg(fig, master=self.window)
canvas.get_tk_widget().pack()
canvas.draw()
window = Tk()
start = mclass (window)
window.mainloop()
从外观上看,您的错误在于:
y=np.array(rows)
...
a.plot(p, range(2+max(y)))
你要求 max(y)
,但是你用来实例化 x
和 y
的 ds.Rows
和 ds.Columns
是标量值(并且是双重确保您使用 int(ds.Rows)
)。这意味着 x
和 y
都将是一个 0 维数组,这可以解释抛出的错误,大概是在 max(y)
上。尝试:
if 'PixelData' in dataset:
rows = int(dataset.Rows)
cols = int(dataset.Columns)
y=rows
x=cols
p=np.array(data)
fig = Figure(figsize=(6,6))
a = fig.add_subplot(111)
a.plot(p, range(2+y))
我正在尝试创建一个简单的 DICOM 查看器,我在其中使用 matplotlib 绘制图像,我想在 tkinter 中显示相同的图(这是一个 DICOM 图像),但是当我 运行代码我得到这个错误。请帮忙。当我尝试绘制 a 时发生错误,但我相信它与我声明 x、y 和 p
的值的方式有关import pydicom
import matplotlib
matplotlib.use('TkAgg')
import numpy as np
from matplotlib.backends.backend_tkagg import
FigureCanvasTkAgg
from matplotlib.figure import Figure
from tkinter import *
from pydicom.data import get_testdata_files
filename = get_testdata_files('000000.dcm')
dataset = pydicom.dcmread('000000.dcm')
data = dataset.pixel_array
class mclass:
def __init__(self, window):
self.window = window
self.button=Button(window,text="check",command=self.plot)
self.button.pack()
def plot (self):
if 'PixelData' in dataset:
rows = int(dataset.Rows)
cols = int(dataset.Columns)
y=np.array(rows)
x=np.array(cols)
p=np.array(data)
fig = Figure(figsize=(6,6))
a = fig.add_subplot(111)
a.plot(p, range(2+max(y)))
canvas = FigureCanvasTkAgg(fig, master=self.window)
canvas.get_tk_widget().pack()
canvas.draw()
window = Tk()
start = mclass (window)
window.mainloop()
从外观上看,您的错误在于:
y=np.array(rows)
...
a.plot(p, range(2+max(y)))
你要求 max(y)
,但是你用来实例化 x
和 y
的 ds.Rows
和 ds.Columns
是标量值(并且是双重确保您使用 int(ds.Rows)
)。这意味着 x
和 y
都将是一个 0 维数组,这可以解释抛出的错误,大概是在 max(y)
上。尝试:
if 'PixelData' in dataset:
rows = int(dataset.Rows)
cols = int(dataset.Columns)
y=rows
x=cols
p=np.array(data)
fig = Figure(figsize=(6,6))
a = fig.add_subplot(111)
a.plot(p, range(2+y))