我正在使用NumPy在Python中使用标准方法创建对称矩阵/数组:
x = rand(500,500)
x = (x+x.T)
all(x==x.T)
> True
现在让我们变得聪明:
x = rand(500,500)
x += x.T
all(x==x.T)
> False
等一下
x==x.T
> array([[ True, True, True, ..., False, False, False],
[ True, True, True, ..., False, False, False],
[ True, True, True, ..., False, False, False],
...,
[False, False, False, ..., True, True, True],
[False, False, False, ..., True, True, True],
[False, False, False, ..., True, True, True]], dtype=bool)
左上和右下部分是对称的。如果我选择了较小的阵列怎么办?
x = rand(50,50)
x += x.T
all(x==x.T)
> True
好....
x = rand(90,90)
x += x.T
all(x==x.T)
> True
x = rand(91,91)
x += x.T
all(x==x.T)
> False
只是要确保…
x = rand(91,91)
x = (x+x.T)
all(x==x.T)
> True
这是一个错误,还是我要学习一些有关+=
NumPy数组的疯狂知识?
该transpose
操作返回该数组的
视图
,这意味着未分配新数组。反过来,这意味着您正在同时读取和修改阵列。很难说出为什么某些大小或结果区域起作用的原因,但是最有可能与numpy处理数组加法(也许是制作子矩阵的副本)和/或数组视图(也许是它创建的小尺寸)有关。一个新数组)。
该x = x + x.T
操作之所以有效,是因为您在那里在那里创建了一个新数组,然后将其分配给x
。
问题内容: 我正在使用arange函数来定义for循环迭代并获得意外结果。 满足以下条件: 仍使用8.35的停止值,如下所示 产生以下 但是我希望我的射程结束于8.35!我知道我可以使用> 8.35和<8.4的止损值来获得我的结果,但是为什么它与众不同并且在我看来不一致? 编辑:我正在使用2.7版 问题答案: 也许这与浮点数的限制有关。由于机器的精度,不可能将所有可能的值完美地存储为浮点数。例如:
问题内容: 给定以下示例: 输出为: 为什么? 问题答案: 这是因为前导零的整数文字是八进制整数(以8为底):
问题内容: 当以某种出乎意料的方式执行特定切片时,numpy数组的形状正在改变 我尝试了将同一阵列切成薄片的几种方法,但是细微的差异会导致阵列形状的结果不同 在最后两个示例中,我不明白为什么最后一个轴移动到第一个位置。 我使用与 问题答案: 在最后两种情况下可能会发现结果出乎意料的原因是,即使您也使用切片进行索引,但数组的索引仍遵循高级索引的规则。 有关此行为的详细说明,您可以检查结合使用高级索引
问题内容: 我在大型代码中发现了一个错误,并将问题简化为以下情况。 尽管在每一步中我都只更改,但是在每一步中我都打印时,它也会更改,因为在第一循环的结尾我将它们分配为相等。我读过这篇文章,但是写了一些,以防我能解决问题,但事实并非如此 问题答案: 问题是,当您将值从分配回时,您实际上并没有将值从传递给,而是实际上是将两个变量指向 同一对象 。 您遇到的问题 解决方案 相反,您将需要复制 值 。使用
问题内容: 小数dtype是否在numpy中可用? 我想numpy.array并不支持每个dtype,但是我认为只要定义正确的操作,它至少可以让dtype传播到尽可能远的距离。我想念什么吗?有什么办法可以工作吗? 问题答案: 重要提示:这是一个糟糕的答案 所以我在真正理解问题之前回答了这个问题。答案已被接受,并且有一些支持,但您最好跳至下一个。 原始答案: 似乎可用: 我不确定您要完成的工作,您的
我做了一个练习,将某些数字提升到给定的幂。正是我遇到的问题: 我们使用整数a、b和n来创建以下序列: 将以a、b和n的形式为您提供q查询。对于每个查询,将与给定a、b和n值对应的序列打印为一行由n个空格分隔的整数。 输入格式 第一行包含一个整数q,表示查询的数量。q后续行的每一行i都包含三个空格分隔的整数,描述该查询的相应ai、bi和ni值。 输出格式 对于每个查询,在新行上打印相应的序列。每个系