【问题标题】:TypeError: iteration over a 0-d array, using numpy and pydicomTypeError:使用 numpy 和 pydicom 对 0 维数组进行迭代
【发布时间】:2019-02-23 19:37:57
【问题描述】:

我正在尝试创建一个简单的 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()

【问题讨论】:

  • 您没有指出错误发生的位置。在您怀疑数组维度问题的地方添加一些print(x.shape) 语句是个好主意。使用 numpy 时,跟踪维度至关重要。
  • 很抱歉,当我尝试绘制 a 时出现错误。我相信这与我声明 y、x 和 p 值的方式有关
  • 确切的错误是什么?

标签: python numpy matplotlib tkinter pydicom


【解决方案1】:

看起来你的错误在这里:

y=np.array(rows)
...
a.plot(p, range(2+max(y)))

您要求max(y),但用于实例化xyds.Rowsds.Columns 是标量值(请确保您使用int(ds.Rows))。这意味着xy 都将是一个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))

【讨论】:

    猜你喜欢
    • 2014-02-07
    • 1970-01-01
    • 2015-01-17
    • 2018-11-17
    • 2016-01-28
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 2011-12-28
    相关资源
    最近更新 更多