[英]How to create a numpy ndarray with bool elements?
我有一个带有 bool 元素的 numpy 数组boo_array
。 以下是我生成它的方式
> a = np.ndarray([2, 1])
> boo_array = a>1
> print(boo_array)
[[False]
[False]]
我检查元素的类型
> print(type(boo_array[0]))
> print(type(boo_array[0][0]))
<class 'numpy.ndarray'>
<class 'numpy.bool_'>
我看到第一个元素[False]
是一个numpy.ndarray
。 因此,我尝试使用以下代码创建my_boo_array
:
> my_boo_arr = np.ndarray(boo_array[0][0]) # Which should generate an ndarray '[False]'
TypeError: an integer is required
为什么当我手动创建它时会引发此错误,但允许生成上面显示的类似数组boo_array[0]
这是因为boo_array[0][0]
不是数组。 它是一个单一的值。 当np.ndarray
呈现单个(非列表,非数组)值时,它假定它是它应该创建的数组的大小。
boo_array[0]
是一个一维数组。 np.ndarray
会将其转换为一个数组,这是一个空操作。
ndarray([2,1])
创建一个具有 float dtype 的 (2,1) 形状数组。 如果您阅读文档,您会看到描述为低级数组创建者。 通常我们使用np.array
或np.zeros
(以及其他一些)。
例如,具有 bool dtype 和所有 False 值的 (2,1) 形状:
In [202]: a = np.zeros((2,1), dtype=bool)
In [203]: a
Out[203]:
array([[False],
[False]])
我们可以从中选择一个“行”:
In [204]: a[0]
Out[204]: array([False])
它具有 (1,) 形状,是a
的第二维。 索引行和列:
In [205]: a[0,0]
Out[205]: False
这是一个标量值。 对于整数索引a[0][0]
做同样的事情。 那不是数组。 它的类型是numpy.bool_
,它确实具有一些类似数组的特性,包括形状()
(0d)。
我们可以使用以下方法制作一个数组:
In [206]: np.array(a[0,0])
Out[206]: array(False)
这也有形状 () (没有括号)。 np.ndarray
在这里不起作用,因为第一个参数应该是“形状”。 当您想从值创建一个数组时,请使用np.array
。
制作具有 2 个 False 值的 (2,) 形状数组:
In [207]: np.array([False, False])
Out[207]: array([False, False])
In [208]: np.array([[False], [True]]) # (2,1) shape
Out[208]:
array([[False],
[ True]])
In [215]: a.shape
Out[215]: (2, 1)
a
2dim 的 a 可以使用a[0]
或a[0,0]
进行索引。
一维数组只能用一个整数索引:
In [216]: b = np.array([False])
In [217]: b.shape
Out[217]: (1,)
In [218]: b[0]
Out[218]: False
0d 数组不能用数字索引(或迭代):
In [219]: b = np.array(False)
In [220]: b.shape
Out[220]: ()
In [221]: b[0]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
Input In [221], in <cell line: 1>()
----> 1 b[0]
IndexError: too many indices for array: array is 0-dimensional, but 1 were indexed
它可以用空元组索引 - 索引为 0:
In [222]: b[()]
Out[222]: False
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.