【问题标题】:How to take only the array matrix (item) from np.array()如何仅从 np.array() 中获取数组矩阵(项目)
【发布时间】:2023-02-04 04:15:13
【问题描述】:

我有一个 numpy 数组的列表mask_arr,列表的元素是 numpy 数组,如下所示:

mask_arr[0][:]
array([[255, 255, 255, ..., 255, 255, 255],
       [255, 255, 255, ..., 255, 255, 255],
       [255, 255, 255, ..., 255, 255, 255],
       ...,
       [255, 255, 255, ..., 255, 255, 255],
       [255, 255, 255, ..., 255, 255, 255],
       [255, 255, 255, ..., 255, 255, 255]], dtype=uint8)

如何在没有 dtype 部分的情况下只获取二维数组:

[[255, 255, 255, ..., 255, 255, 255],
 [255, 255, 255, ..., 255, 255, 255],
 [255, 255, 255, ..., 255, 255, 255],
 ...,
 [255, 255, 255, ..., 255, 255, 255],
 [255, 255, 255, ..., 255, 255, 255],
 [255, 255, 255, ..., 255, 255, 255]]

原因是我收到以下错误:

im = mask_arr[i]
*** TypeError: only integer scalar arrays can be converted to a scalar index

【问题讨论】:

  • 无法删除 dtype,它是数组的基本组成部分。你能解释一下i 是什么吗?从错误消息来看,它显然是一个数组,因为您不能用数组索引列表。
  • @RoySmart i是for循环的索引
  • 您可以发布其余代码吗?从错误消息来看,i 似乎是一个数组,而不是单个整数。
  • @RoySmart 感谢您提到这一点。我可以纠正它

标签: python arrays list numpy numpy-ndarray


【解决方案1】:

制作数组列表:

In [19]: alist = [np.ones((3,4),'uint8'),np.zeros((2,2),'int16')]

该列表的默认显示:

In [20]: alist
Out[20]: 
[array([[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]], dtype=uint8),
 array([[0, 0],
        [0, 0]], dtype=int16)]

使用 str 方法显示列表的元素:

In [21]: for a in alist: print(str(a))
[[1 1 1 1]
 [1 1 1 1]
 [1 1 1 1]]
[[0 0]
 [0 0]]

'数组'、dtype 和逗号被省略。那只是一种展示风格;实际数组没有变化。

将其与转换为列表的数组的显示进行比较——注意逗号。

In [22]: for a in alist: print(a.tolist())
[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
[[0, 0], [0, 0]]

在python中,每个类都定义了__str____repr__方法,决定了它们的显示方式。显示给出了对象类别的概念。但是不同的显示不会改变类。

同样,每个类都有自己的索引规则。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 2018-10-13
    • 2021-06-05
    • 2018-12-12
    • 2014-04-05
    相关资源
    最近更新 更多