Numpy:这段代码是如何相互不同的?

时间:2018-05-20 21:45:41

标签: python numpy

<form class="signup" id="signup_form" method="post" action="{% url 'account_signup' %}"> {% csrf_token %} {% bootstrap_form form %} {% if redirect_field_value %} <input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" /> {% endif %} <br> <button type="submit" class="btn btn-primary btn-block">Sign Up</button> </form> 成为一个数组,其中每个元素都是列索引(小于rN的大小为r)且MP x M数组。

以下两个代码段的行为不同。为什么呢?

1

N

2

P[:, r] += 1

2 个答案:

答案 0 :(得分:3)

第一个为r的每个元素选择一个完整列。第二个只是一个元素。您可以直接比较两种情况:

>>> P = np.arange(12).reshape(4, 3)
>>> r = np.random.randint(0, 3, (4,))
>>> r
array([1, 1, 2, 0])
>>> 
>>> P[:, r]
array([[ 1,  1,  2,  0],
       [ 4,  4,  5,  3],
       [ 7,  7,  8,  6],
       [10, 10, 11,  9]])
>>> P[np.arange(4), r]
array([1, 4, 8, 9])

正如你所看到的那样,第二个基本上产生了第一个的对角线。

您可以从查看部分&#34;结合高级和基本索引&#34;中获益。在numpy docs

答案 1 :(得分:1)

第一个代码段中的

P[:, r]选择整个第一个轴(:就像0:-1这里)和r - 第二个轴。

for循环中的

P[i, r[i]]仅选择i第一个轴和r[i] - 第二个轴,它只是一个元素。

一旦明确了,两个人给出不同的结果就不足为奇了。