Python numpy整形如何使用负变量作为第二个参数

Python numpy整形如何使用负变量作为第二个参数,python,python-3.x,numpy,Python,Python 3.x,Numpy,我试图用负变量作为第二个参数 a = np.array([[1,2,3], [4,5,6]]) print(np.reshape(a, (3,-1)) ) print("___________________________________") print(np.reshape(a, (3,-2)) ) print("___________________________________") print(np.reshape(a, (3,-3)) ) print("_______________

我试图用负变量作为第二个参数

a = np.array([[1,2,3], [4,5,6]])
print(np.reshape(a, (3,-1)) )
print("___________________________________")
print(np.reshape(a, (3,-2)) )
print("___________________________________")
print(np.reshape(a, (3,-3)) )
print("___________________________________")
print(np.reshape(a, (3,2)) )
以上所有四种类型的整形基本上给出了与输出相同的结果


我只是想弄明白上面的区别是什么?-1和2可以互换使用吗?

要重塑的参数可以包含一个由负数表示的未知维度,该值是从数组长度和剩余维度推断出来的

比如说

a = np.array([[1,2,3, 4], [5,6,7,8]])
print(np.reshape(a, (-2)) )
print("___________________________________")
print(np.reshape(a, (2, 2,-2)) )
print("___________________________________")
print(np.reshape(a, (2, -1,-2)) )
输出

[1 2 3 4 5 6 7 8]
___________________________________
[[[1 2]
  [3 4]]

 [[5 6]
  [7 8]]]
___________________________________
...
ValueError: can only specify one unknown dimension

用一个负数重塑形状并不是什么神奇的事情。如答案所述,负号后的数字并不重要

下面是一个函数,演示如何进行整形。请注意,这纯粹是演示性的,而不是源代码或类似内容的实际实现

def computeNegativeDim(arr):
givenDims=列表(arr.shape)
knownDims=[d在给定的ndims中表示d,如果d>0]
val=1
对于k in knownDims:
val*=k
DIMOFPRIOUSLYUNKNOWN=arr.size/val
对于givenDims中的g:
如果g<0:
g=val
newarr=arr.重塑(给定)

或者在上面的某个地方。

这个
-1
仅仅意味着,
计算所需的形状。由于“重塑”无法更改图元总数,因此,如果指定除一个标注外的所有标注,则剩余标注只有一个可能的值。
[1 2 3 4 5 6 7 8]
___________________________________
[[[1 2]
  [3 4]]

 [[5 6]
  [7 8]]]
___________________________________
...
ValueError: can only specify one unknown dimension