特定维度 numpy 中的索引元素
Index elements in specific dimension numpy
我知道标题很笼统,但我不知道有什么更好的方式来描述我的问题。
我正在使用 scipy 的 io.loadmat
加载 Matlab mat 文件。这个 mat 文件最初有一些结构,我想这些结构被转换为 numpy 数组。 mat文件的结构如下。有 500 个结构,每个结构有 3 个字段。
print(data[0].shape)
(500, )
第一个和第二个字段的元素形状为 (300, 300)
print(data[0][0].shape)
(300, 300)
print(data[499][0].shape)
(300, 300)
print(data[0][1].shape)
(300, 300)
print(data[499][1].shape)
(300, 300)
第三个字段是标量
print(data[0][2].shape)
(1, 1)
print(data[499][2].shape)
(1, 1)
我想拆分这个文件,所以我有一个大小为 (500, 300, 300)、(500, 300, 300) 和 (500, )
的变量
我试过了
field1 = data[:][0]
但它给出了错误的元素。 field1[0] = data[0][0]
、field1[1] = data[0][1]
、field1[2] = data[0][2]
和 field1[3]
给出无效索引错误。我想要 field1[0] = data[0][0]
... field1[499] = data[499][0]
如何在大小为 500 的维度上建立索引?
我知道我能做到
field1 = np.array([data[i][0] for i in range(500)])
但我想知道是否有更简单的东西
听起来你有一个包含 3 个字段的结构化数组。沿着这条线的东西:
两个字段:
In [38]: dt = np.dtype([('f0',int,(2,2)),('f1','U3',(1,1))])
对于 records/items:
In [39]: data = np.zeros((4,), dtype=dt)
In [40]: data
Out[40]:
array([([[0, 0], [0, 0]], [['']]), ([[0, 0], [0, 0]], [['']]),
([[0, 0], [0, 0]], [['']]), ([[0, 0], [0, 0]], [['']])],
dtype=[('f0', '<i8', (2, 2)), ('f1', '<U3', (1, 1))])
In [41]: data.shape
Out[41]: (4,)
一条记录:
In [42]: data[0]
Out[42]: ([[0, 0], [0, 0]], [['']])
该字段可以 select 按数字编辑 - 因为它是一个元组(或类似元组):
In [43]: data[0][0]
Out[43]:
array([[0, 0],
[0, 0]])
但要select所有记录的字段,请使用名称:
In [45]: data['f0']
Out[45]:
array([[[0, 0],
[0, 0]],
[[0, 0],
[0, 0]],
[[0, 0],
[0, 0]],
[[0, 0],
[0, 0]]])
In [46]: data['f0'].shape
Out[46]: (4, 2, 2)
我知道标题很笼统,但我不知道有什么更好的方式来描述我的问题。
我正在使用 scipy 的 io.loadmat
加载 Matlab mat 文件。这个 mat 文件最初有一些结构,我想这些结构被转换为 numpy 数组。 mat文件的结构如下。有 500 个结构,每个结构有 3 个字段。
print(data[0].shape)
(500, )
第一个和第二个字段的元素形状为 (300, 300)
print(data[0][0].shape)
(300, 300)
print(data[499][0].shape)
(300, 300)
print(data[0][1].shape)
(300, 300)
print(data[499][1].shape)
(300, 300)
第三个字段是标量
print(data[0][2].shape)
(1, 1)
print(data[499][2].shape)
(1, 1)
我想拆分这个文件,所以我有一个大小为 (500, 300, 300)、(500, 300, 300) 和 (500, )
的变量我试过了
field1 = data[:][0]
但它给出了错误的元素。 field1[0] = data[0][0]
、field1[1] = data[0][1]
、field1[2] = data[0][2]
和 field1[3]
给出无效索引错误。我想要 field1[0] = data[0][0]
... field1[499] = data[499][0]
如何在大小为 500 的维度上建立索引?
我知道我能做到
field1 = np.array([data[i][0] for i in range(500)])
但我想知道是否有更简单的东西
听起来你有一个包含 3 个字段的结构化数组。沿着这条线的东西:
两个字段:
In [38]: dt = np.dtype([('f0',int,(2,2)),('f1','U3',(1,1))])
对于 records/items:
In [39]: data = np.zeros((4,), dtype=dt)
In [40]: data
Out[40]:
array([([[0, 0], [0, 0]], [['']]), ([[0, 0], [0, 0]], [['']]),
([[0, 0], [0, 0]], [['']]), ([[0, 0], [0, 0]], [['']])],
dtype=[('f0', '<i8', (2, 2)), ('f1', '<U3', (1, 1))])
In [41]: data.shape
Out[41]: (4,)
一条记录:
In [42]: data[0]
Out[42]: ([[0, 0], [0, 0]], [['']])
该字段可以 select 按数字编辑 - 因为它是一个元组(或类似元组):
In [43]: data[0][0]
Out[43]:
array([[0, 0],
[0, 0]])
但要select所有记录的字段,请使用名称:
In [45]: data['f0']
Out[45]:
array([[[0, 0],
[0, 0]],
[[0, 0],
[0, 0]],
[[0, 0],
[0, 0]],
[[0, 0],
[0, 0]]])
In [46]: data['f0'].shape
Out[46]: (4, 2, 2)