【发布时间】:2020-04-23 08:23:28
【问题描述】:
这是我正在重写的六边形晶格上生成点同心环的算法的一部分。
我以为这都是整数数学,但我发现在某些情况下,数组会意外地创建为浮点数!
在下面的序列中,p0 是 float64 对应于 n=1 而int64 对应于n>1,我根本不知道为什么会这样。
我正在运行 numpy 版本 1.17.3,在 MacOS 上安装 Python 3.7.3 的 Anaconda
import numpy as np
n_max = 3
for n in range(1, n_max+1):
seq = np.arange(n, -n-1, -1, dtype=int)
p0 = np.hstack((seq, (n-1)*[-n], seq[::-1], (n-1)*[n]))
print('n: ', n)
print('seq: ', seq)
print('p0: ', p0.dtype, p0)
print('')
返回
n: 1
seq: [ 1 0 -1]
p0: float64 [ 1. 0. -1. -1. 0. 1.]
n: 2
seq: [ 2 1 0 -1 -2]
p0: int64 [ 2 1 0 -1 -2 -2 -2 -1 0 1 2 2]
n: 3
seq: [ 3 2 1 0 -1 -2 -3]
p0: int64 [ 3 2 1 0 -1 -2 -3 -3 -3 -3 -2 -1 0 1 2 3 3 3]
这是预期的行为吗?
更新1:好的np.hstack(([1, 0, -1], 1*[7]))返回int64但np.hstack(([1, 0, -1], 0*[7]))返回float64,所以0*[n]在np.hstack操作的元组中的出现触发了转至float64。
更新 2: 刚刚在 Code Review 中询问:Is there a better, cleaner or otherwise “less tricky” way to get these hexagonal arrays of dots arranged in this spiral pattern?
【问题讨论】:
-
我自己的期望是空数组根本没有内容类型(除非我们强迫他们这样做)。连接一个空数组不应该改变类型。
-
@aka.nice 同意,这就是我所期望的,这真是一个惊喜!
标签: python python-3.x numpy floating-point integer