如何从numpy数组列表中提取每个数组的前10列
解决numpy数组列表取每个数组前10列的问题
嘿,我完全懂你踩的这个坑!Python里列表索引和numpy数组索引的组合确实容易让人混淆,你用list[:][:10]的时候,其实是先把整个列表完整取出来(list[:]等于复制整个列表),然后再取这个新列表的前10个元素——也就是前10个数组,根本不是每个数组的前10列,这就难怪结果不对啦!
正确的做法:列表推导式 + numpy数组索引
要拿到每个数组的前10列,你需要遍历列表里的每一个numpy数组,对每个数组单独做列索引操作。最简洁的方式就是用列表推导式:
import numpy as np # 假设你的numpy数组列表名叫arr_list # 遍历每个数组,取所有行的前10列 first_10_cols_list = [arr[:, :10] for arr in arr_list]
这里的arr[:, :10]是numpy的标准索引语法:
- 第一个
:表示取数组的所有行 - 第二个
:10表示取数组的前10列
进阶:缩放前10列并保留哑变量
如果你还要把前10列传入缩放器转换,同时保留后面的哑变量列,可以这样做(以StandardScaler为例):
from sklearn.preprocessing import StandardScaler # 1. 先收集所有数组的前10列,用来拟合缩放器(确保缩放的一致性) all_first_10 = np.vstack([arr[:, :10] for arr in arr_list]) scaler = StandardScaler() scaler.fit(all_first_10) # 2. 遍历每个数组,分别处理 processed_arrays = [] for arr in arr_list: # 转换前10列 scaled_part = scaler.transform(arr[:, :10]) # 取出剩余的哑变量列(从第10列到末尾) dummy_part = arr[:, 10:] # 合并转换后的部分和哑变量部分 combined_arr = np.hstack([scaled_part, dummy_part]) processed_arrays.append(combined_arr)
这样处理后,你得到的processed_arrays列表里,每个数组的前10列是缩放后的结果,后面的列保持原来的哑变量不变,完全符合你的需求~
内容的提问来源于stack exchange,提问作者CarterB
相关产品推荐
相关产品推荐

