当前位置: 首页 > 知识库问答 >
问题:

python中A[0]和A[0:1]numpy数组的区别

全弘深
2023-03-14

我有一个像这样的麻木数组

candidates = 

array([[1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0,
        0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0],
       [0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,
        0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1],
       [1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,
        0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0]])

我不明白候选人有什么区别[0]

candidates[0] = 

array([1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0,
       0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0]

candidates[0].shape = (34,)

候选[0:1]

candidates[0:1] = 

array([[1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0,
        0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0]])

candidates[0:1].shape = (1, 34)

因为我认为两者应该给出完全相同的结果?我的意思是后面的候选[0:1]应该只代表第一个元素,对吗?那么,两者到底有什么区别?

共有3个答案

仲阳朔
2023-03-14

不。不同之处在于阵列的形状。在第一个实例中,您有一个 1 维数组。在第二个维度中,您有一个 2 维数组。

您可以通过测试数组的形状属性来进行测试:

print(np.array([[1, 0]]).shape)
(1, 2)

print(np.array([1, 0]).shape)
(2,)

通过使用项目列表对数组进行切片,例如[0:1],您的结果将增加一个维度。请注意,这与使用范围无关;当您使用包含1个元素的列表作为索引器时也是如此:

x = np.array([[0, 1], [2, 3]])

print(x[[0]].shape)
# (1, 2)
谷良弼
2023-03-14

不同之处在于维数:候选[0:1]将返回一个二维数组,而候选[0]将返回一个一维数组:

>>> candidates[0:1].ndim
2
>>> candidates[0].ndim
1

您还可以通过候选项的输出来“查看”维度[0:1]:注意数组周围的方括号数吗?这些可以是数组维度的提示

夹谷宜民
2023-03-14

在Python中,[0]是索引-它返回第一个元素,而[0:1]是切片-它返回所有前1个元素的集合。

用一个普通的旧列表可能更容易看到:

>>> lst = [1, 2, 3]
>>> lst[0]
1
>>> lst[0:1]
[1]

Numpy扩展了Python索引和切片,出于不同的原因,其中一些会给你一个2D结果——例如,你可以用< code>[0]作为一个“类数组”进行索引,这将作为一个索引数组工作),但是相关的基础知识在这里是相同的。对于2D numpy数组,元素是行,因此< code>candidates[0]是第一行,这是1D数组,而< code>candidates[0:1]是所有前1行的数组,这是2D数组。所以第一个有shape (34,),第二个有shape (1,34)

如果你不仔细观察,差异可能并不明显,但比较一下两者的开始:

array([1,
array([[1,

它们没有排成一行,因为第二个有两个括号,而不是一个,这是因为它是一个2D数组,而不是1D。

 类似资料:
  • 本文向大家介绍if(a-b <0)和if(a 相关面试题,主要包含被问及if(a-b <0)和if(a 时的应答技巧和注意事项,需要的朋友参考一下 并且可能意味着两个不同的东西。考虑以下代码: 运行时,将仅打印。发生的事情显然是错误的,但是溢出并变为,这是负面的。 话虽如此,请考虑一下数组的长度确实接近。中的代码如下所示: 确实接近,所以(是)可能溢出并变成(即负数)。然后,将 下溢 相减回正数。

  • 我已经花了所有的努力来解决这个问题。:)我请求帮助。 为了理解: “空”-第(- “数字”——父母的位置。第一分段(- 所以 [“空”、“0”、“1”、“2”、“2”、“1”、“0”]到[“1”、“1.1”、“1.1.1”、“a”、“b”、“1.1.2”、“1.2”] “null”:第一个元素“null”-

  • 问题内容: 和Python和有什么不一样? 我尝试环顾四周,但没有在这些线上找到具体问题。如果已经回答,则链接就足够了。 问题答案: 0和1是退出代码。 意味着干净出口,没有任何错误/问题 表示存在一些问题/错误/问题,这就是程序退出的原因。 这不是特定于Python的,非常普遍。非零退出代码被视为异常退出,有时,错误代码指示问题所在。错误代码为零表示成功退出。 这对于其他程序,shell,调用方

  • 问题内容: public void push(E element) { if (size == elements.length) { resize(); // doubel of size } elements[size++] = element; } Java中的a 和 a或a–和–a有什么区别 谢谢 问题答案: 或是后缀运算符,表示a的值将在对表达式求值后更改。 或是前缀运算,表示a的值将在对

  • 问题内容: 为什么以下两个语句的结果不同? 编辑: 我应该补充一点,我怀疑将“ 0”第一条语句强制转换为要比较的布尔值-这应该与“‘0’== true”完全相同,显然这是不正确的。 问题答案: 首先,为了完整性: 是的,因为是一个非空字符串,这始终计算结果为: 字符串:如果参数为空字符串(其长度为零),则结果为 false; 否则为 false 。否则结果为 true 。 现在到。 这里将进行两次