Numpy ndarray 赋值问题

Numpy ndarray assignment issue

我无法弄清楚这段代码有什么问题。您能帮我了解问题出在哪里以及如何解决吗?

import numpy as np
T = np.random.randint(0,5,(3,2,3))
print(T)
print(T[0,0])
print(T[0,0].sum())
T[0,0] = T[0,0]/T[0,0].sum()
print(T)

我得到的输出:

[[[4 1 3]
  [1 4 4]]

 [[0 0 4]
  [2 2 2]]

 [[2 4 2]
  [2 1 4]]]
[4 1 3]
8
[0.5   0.125 0.375]
[[[0 0 0]
  [1 4 4]]

 [[0 0 4]
  [2 2 2]]

 [[2 4 2]
  [2 1 4]]]

我期望的输出:

[[[4 1 3]
  [1 4 4]]

 [[0 0 4]
  [2 2 2]]

 [[2 4 2]
  [2 1 4]]]
[4 1 3]
8
[0.5   0.125 0.375]
[[[0.5   0.125 0.375]
  [1 4 4]]

 [[0 0 4]
  [2 2 2]]

 [[2 4 2]
  [2 1 4]]]

如有任何帮助,我们将不胜感激。谢谢!

您的数组是 int 类型(调用 randint)并且您尝试将 float 分配给它,这会将其中的数字四舍五入为 int。如果您想将值保持为 float,请将您的数组也转换为 float

T = T.astype(np.float)
T[0,0] = T[0,0]/T[0,0].sum()
print(T)

示例不同,因为它是随机创建的,但是给你的ides:

[[[0.   0.75 0.25]
  [1.   4.   0.  ]]

 [[1.   4.   0.  ]
  [1.   3.   1.  ]]

 [[3.   2.   1.  ]
  [4.   0.   2.  ]]]