【问题标题】:Numpy and 2-d array differencesNumpy 和二维数组的区别
【发布时间】:2014-12-21 06:40:42
【问题描述】:

到目前为止,我想做的事情如下

ar2 = [[0 for t in range(maxy-miny)] for t in range(maxx-minx)]

for first,x in enumerate(range(minx, maxx)):
    for second,y in enumerate(range(miny, maxy)):
        ar2[first][second] = a[x][y]

io.imshow(ar2)

问题是它真的很慢。所以我正在考虑 numpy。

ar = np.zeros((maxx-minx, maxy-miny), dtype=np.ndarray) 

for first,x in enumerate(range(minx, maxx)):
    for second,y in enumerate(range(miny, maxy)):
        ar[first][second] = a[x][y] 

io.imshow(ar)

虽然在第二种情况下,图像不会显示

TypeError: Image data can not convert to float

我试图检查可能发生的情况,所以我测试了 ar[0] 和 ar2[0]

二维数组的输出:

[数组([230, 197, 204], dtype=uint8) 数组([241, 209, 214], dtype=uint8)
array([233, 201, 206], dtype=uint8) array([214, 183, 188],dtype=uint8)...

Numpy 数组的输出:

[数组([230, 197, 204], dtype=uint8), 数组([241, 209, 214], dtype=uint8),

array([233, 201, 206], dtype=uint8), ...

显然,numpy 正在使用逗号,但我不明白它是如何以及为什么会发生的。

【问题讨论】:

  • @AndyHayden 这是原始图像的二维数组。我找到了我感兴趣的部分,我想将它们单独转移到一个新的部分。
  • 正如@sebix 所说,它不是一个正确的 2D numpy 数组(dtype 不正确)。空格与逗号之间的关系是一个红鲱鱼,这纯粹是打印对象的方式。
  • @AndyHayden 我如何提供更多信息?哪一部分可以做不同的事情?我的 a 完成如下“a = io.imread('C:\Users\Dimitrios\Desktop\polimesa\\punk.jpg')”
  • 我自己不能保证任何事情,但通常有助于提供可重现的示例(即我们可以在家尝试的东西),在这种情况下,这意味着向我们展示 a 或至少前几个元素/rows/columns of a.

标签: python arrays numpy


【解决方案1】:

您使用的 dtype 不是有效的类似数字的类型,您使用 np.ndarray 作为数组中各个值的类型。

import matplotlib.pyplot as plt
import numpy as np

ar = np.zeros((maxx-minx, maxy-miny))
a = plt.imread('something.jpg')

for first,x in enumerate(range(minx, maxx)):
    for second,y in enumerate(range(miny, maxy)):
        ar[first][second] = a[x][y] 

plt.imshow(ar)

这应该可行 - 但是您没有提供足够的信息来可靠地测试它。

我还建议使用plt 作为matplotlib.pyplot 的缩写,而不是io,这很容易与实际的io 模块混淆。

但是,您可以实现相同的目标,但根本不循环:

ar3[0:maxx-minx, 0:maxy-miny] = a[minx:maxx,miny:maxy]
np.allclose(ar2, ar3)  # True

【讨论】:

  • 我得到“ValueError: setting an array element with a sequence”。我之前也用过“from skimage import io”。
  • 我无法重现。请提供完全可重现的代码片段。我还添加了一个没有循环的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-16
相关资源
最近更新 更多