如何对 Python 中的数组进行切片
How to slice an array of arrays in Python
我正在尝试在 python 上编写自己的机器学习脚本(我知道有相关的库,但这纯粹是为了好玩 - 我正在学习 Python).我有以下数组;
[array([[[ 5, 5, 5, 255],
[ 6, 6, 6, 255],
[ 6, 6, 6, 255],
...,
[ 12, 12, 12, 255],
[ 10, 10, 10, 255],
[ 10, 10, 10, 255]],
[[ 8, 8, 8, 255],
[ 10, 10, 10, 255],
[ 14, 14, 14, 255],
...,
[ 15, 15, 15, 255],
[ 13, 13, 13, 255],
[ 13, 13, 13, 255]],
这样持续了一段时间。我使用以下代码得到了这个数组:
imagesList = listdir("someaddress")
loadedImages = []
for image in imagesList:
#img = PImage.open()
loadedImages.append(misc.imread("someaddress" + image))
我的逻辑是,我想将图像文件作为像素值数组读取,以用于图像分类问题。从上面的数据可以看出,图像是灰度的。我想从这些数据中删除一个维度,并且每个像素只有一个值(例如,([[[5],[6],[6],[12] ...)255 只是alpha 值(我不关心)。我知道这是我需要使用的数组拼接,但是我不知道如何将它应用于这个问题。
我试过了;
loadedImages[:,1]
我收到以下错误;
TypeError: list indices must be integers, not tuple
我真正想要的结果如下所示
[array([[ 5,
6,
6,
...,
12,
10,
10],
[ 8,
10,
14,
...,
15,
13,
13,
您是否尝试过删除拼接处的逗号,例如 loadedimages[:1]?对于这个数组 arr = [ 5, 5, 5, 255]
,要删除 255,您可以 arr = arr[:3]
。对于多维数组,您可以根据需要嵌套 for 循环,以便迭代各个数组。例如
main_array = [[ 5, 5, 5, 255],
[ 6, 6, 6, 255],
[ 6, 6, 6, 255]]
for sub_array in main_array:
spliced_array = sub_array[:3]
print spliced_array
会产生
[5, 5, 5]
[6, 6, 6]
[6, 6, 6]
另外,在Python中,这种数据结构被称为列表。这可能是您很难找到相关信息的原因。
编辑:您也可以尝试使用列表解析。这在 python 中非常有用。例如
arr = [[ 5, 5, 5, 255],
[ 6, 6, 6, 255],
[ 6, 6, 6, 255]]
filtered_arr = [a[0] for a in arr]
filtered_arr
>>>[5,6,6]
只需使用 numpy,你就可以做你想做的那种扩展切片:
import numpy as np
a = np.array([[ 5, 5, 5, 255],
[ 6, 6, 6, 255],
[ 6, 6, 6, 255]])
# first column:
print(a[:, 0])
在这个例子中,:
代表数组的所有行,0
代表第一列
我正在尝试在 python 上编写自己的机器学习脚本(我知道有相关的库,但这纯粹是为了好玩 - 我正在学习 Python).我有以下数组;
[array([[[ 5, 5, 5, 255],
[ 6, 6, 6, 255],
[ 6, 6, 6, 255],
...,
[ 12, 12, 12, 255],
[ 10, 10, 10, 255],
[ 10, 10, 10, 255]],
[[ 8, 8, 8, 255],
[ 10, 10, 10, 255],
[ 14, 14, 14, 255],
...,
[ 15, 15, 15, 255],
[ 13, 13, 13, 255],
[ 13, 13, 13, 255]],
这样持续了一段时间。我使用以下代码得到了这个数组:
imagesList = listdir("someaddress")
loadedImages = []
for image in imagesList:
#img = PImage.open()
loadedImages.append(misc.imread("someaddress" + image))
我的逻辑是,我想将图像文件作为像素值数组读取,以用于图像分类问题。从上面的数据可以看出,图像是灰度的。我想从这些数据中删除一个维度,并且每个像素只有一个值(例如,([[[5],[6],[6],[12] ...)255 只是alpha 值(我不关心)。我知道这是我需要使用的数组拼接,但是我不知道如何将它应用于这个问题。
我试过了; loadedImages[:,1]
我收到以下错误;
TypeError: list indices must be integers, not tuple
我真正想要的结果如下所示
[array([[ 5,
6,
6,
...,
12,
10,
10],
[ 8,
10,
14,
...,
15,
13,
13,
您是否尝试过删除拼接处的逗号,例如 loadedimages[:1]?对于这个数组 arr = [ 5, 5, 5, 255]
,要删除 255,您可以 arr = arr[:3]
。对于多维数组,您可以根据需要嵌套 for 循环,以便迭代各个数组。例如
main_array = [[ 5, 5, 5, 255],
[ 6, 6, 6, 255],
[ 6, 6, 6, 255]]
for sub_array in main_array:
spliced_array = sub_array[:3]
print spliced_array
会产生
[5, 5, 5]
[6, 6, 6]
[6, 6, 6]
另外,在Python中,这种数据结构被称为列表。这可能是您很难找到相关信息的原因。
编辑:您也可以尝试使用列表解析。这在 python 中非常有用。例如
arr = [[ 5, 5, 5, 255],
[ 6, 6, 6, 255],
[ 6, 6, 6, 255]]
filtered_arr = [a[0] for a in arr]
filtered_arr
>>>[5,6,6]
只需使用 numpy,你就可以做你想做的那种扩展切片:
import numpy as np
a = np.array([[ 5, 5, 5, 255],
[ 6, 6, 6, 255],
[ 6, 6, 6, 255]])
# first column:
print(a[:, 0])
在这个例子中,:
代表数组的所有行,0
代表第一列