首页 > 解决方案 > Numpy ndarray分配问题

问题描述

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

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]]]

任何帮助,将不胜感激。谢谢!

标签: numpynumpy-ndarraynumpy-slicing

解决方案


您的数组是类型int(调用randint),您尝试分配float给它,它将int在其中舍入数字。如果要将值保留为float,请将数组也转换float为。

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

该示例不同,因为它是随机创建的,但为您提供了 ide:

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

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

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

推荐阅读