将多维数组中的选定值附加到新数组

时间:2017-02-25 00:02:28

标签: python numpy matrix

你好:)我是一个python初学者,我最近开始使用numpy,基本上我得到了一个nd-array:data.shape = {55000, 784}填充了float32值。基于我所做的条件,我想将特定的行及其列附加到新数组,重要的是格式保持不变。例如我希望data[5][0-784]附加到一个空数组..我听说过一种叫做花哨索引的东西,但仍然无法弄清楚如何使用它,一个例子可以帮助我度过难关。我很感激你们的帮助! - 迎接

2 个答案:

答案 0 :(得分:1)

我建议浏览Indexing的文档。但是,这是一个展示的例子。

import numpy as np

data = np.array([[0, 1, 2], [3, 4, 5]])
print(data.shape)
(2, 3)

print(data)
[[0 1 2]
 [3 4 5]]

selection = data[1, 1:3]
print(selection)
[4 5]

花式索引是一种高级索引功能,允许使用整数数组进行索引。这是一个例子。

fancy_selection = data[[0, 1], [0, 2]]
print(fancy_selection)
[0 5]

由于您还询问了附加信息,请查看Append a NumPy array to a NumPy array。无论如何这是一个例子。

data_two = np.array([[6, 7, 8]])
appended_array = np.concatenate((data, data_two))
print(appended_array)
[[0 1 2]
 [3 4 5]
 [6 7 8]]

答案 1 :(得分:0)

正如@hpaulj在他的评论中建议的那样,附加到数组可能但效率低,应该避免。让我们转向您的示例,但要使数字更小。

PendingIntent

选择元素:

a = np.sum(np.ogrid[1:5, 0.1:0.39:0.1])
a
# array([[ 1.1,  1.2,  1.3],
#        [ 2.1,  2.2,  2.3],
#        [ 3.1,  3.2,  3.3],
#        [ 4.1,  4.2,  4.3]])
a.shape
# (4, 3)

选择整行:

a[1,2]
# 2.3

或列:

a[2, :] # or a[2] or a 2[, ...]
# array([ 3.1,  3.2,  3.3])

花哨的索引,观察第一个索引不是切片而是列表或数组:

a[:, 1] # or a[..., 1]
# array([ 1.2,  2.2,  3.2,  4.2])

可以在多个轴上使用花哨的索引来选择任意元素并将它们组装成新的形状,例如你可以像这样制作一个2x2x2数组:

a[[3,0,0,1], :] # or a[[3,0,0,1]]
# array([[ 4.1,  4.2,  4.3],
#        [ 1.1,  1.2,  1.3],
#        [ 1.1,  1.2,  1.3],
#        [ 2.1,  2.2,  2.3]])

还有逻辑索引

a[ [[[0,1], [1,2]], [[3,3], [3,2]]], [[[2,1], [1,1]], [[2,1], [0,0]]] ]
# array([[[ 1.3,  2.2],
#         [ 2.2,  3.2]],
#
#        [[ 4.3,  4.2],
#         [ 4.1,  3.1]]])

要合并数组,请在列表中收集它们并使用mask = np.isclose(a%1.1, 1.0) mask # array([[False, False, False], # [ True, False, False], # [False, True, False], # [False, False, True]], dtype=bool) a[mask] # array([ 2.1, 3.2, 4.3])

concatenate

希望有助于您入门。