我試圖初始化一個包含命名元組的NumPy數組。當我用empty
數據初始化數組並且事後設置了數據時,一切正常;但是,當使用numpy.array
構造函數時,NumPy並沒有達到我的預期。使用命名元組初始化numpy數組
的
import numpy
data = numpy.random.rand(10, 3)
print data[0]
# Works
a = numpy.empty(
len(data),
dtype=numpy.dtype([('nodes', (float, 3))])
)
a['nodes'] = data
print
print a[0]['nodes']
# Doesn't work
b = numpy.array(
data,
dtype=numpy.dtype([('nodes', (float, 3))])
)
print
print b[0]['nodes']
輸出是
[ 0.28711363 0.89643579 0.82386232]
[ 0.28711363 0.89643579 0.82386232]
[[ 0.28711363 0.28711363 0.28711363]
[ 0.89643579 0.89643579 0.89643579]
[ 0.82386232 0.82386232 0.82386232]]
這與NumPy的1.8.1。
有關如何組織array
構造函數的任何提示?
這麼說,我使用'empty'還會讀取作爲一個迭代的數據認爲的選項。所以它可能不會好多了。主要的問題是,如果人們也不能這樣做,那麼人們會希望這樣做。 – eickenberg 2014-08-28 18:31:16
基本的觀點是,像這樣'dtype',數組元素是'tuples'。 'a [1]'返回一個「元組」。所以要設置整個數組,你必須使用元組列表。 'a [:] = [(x,)for x in data]'也適用。 – hpaulj 2014-08-28 22:18:24
是的,這是OP的第一選擇。它被認爲是可行的 - 即使數據數組可能是作爲迭代器讀入的(而不是100%確定)。所以在這種情況下,轉換爲元組甚至不是必需的。問題是關於如何使用numpy數組構造函數來做同樣的事情 – eickenberg 2014-08-29 06:20:53