You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何让NumPy识别数据维度,生成(M,11,64)形状的3D数组?

解决NumPy无法识别多维样本维度的问题

首先我得帮你捋清楚问题根源——你说用np.array(main_array)没效果,大概率是因为main_array里的每个样本不是统一的NumPy数组结构,或是从Pandas取数时外层被识别成了object类型的一维数组(每个元素是独立的二维结构,但外层只被当成单个元素)。下面给你几个针对性的解决办法:

第一步:先确认数据结构

先跑两行代码摸清你的样本类型和形状:

# 查看第一个样本的类型
print(type(main_array[0]))
# 查看第一个样本的形状(不管是列表还是NumPy数组都能识别)
print(np.shape(main_array[0]))

根据输出结果,对应下面的具体解法即可。

第二步:针对性解决方法

情况1:每个样本是嵌套列表(非NumPy数组)

如果main_array是包含M个(11,64)嵌套列表的大列表,直接用np.array()有时会因为列表的存储逻辑识别不出维度,这时候改用np.stack()就能完美解决:

import numpy as np
fixed_array = np.stack(main_array, axis=0)
# 检查形状,应该就是(M, 11, 64)了
print(fixed_array.shape)

np.stack会把结构一致的元素沿着指定轴堆叠,自动识别内层的二维结构。

情况2:从Pandas列中获取的object类型数组

如果你是从Pandas DataFrame的某一列取到的main_array,那这一列大概率被存成了object类型的一维数组(每个元素是独立的二维结构)。这时候可以先把列内元素转成NumPy数组,再堆叠:

import pandas as pd
import numpy as np

# 假设你的特征存在df的'feature'列中
# 先将列内每个元素转为NumPy数组
df['feature'] = df['feature'].apply(np.array)
# 取出列数据后用stack堆叠成三维数组
fixed_array = np.stack(df['feature'].values, axis=0)
print(fixed_array.shape)

情况3:存在形状不一致的样本

如果上面两种方法都没用,那你得排查是不是有样本的形状不是(11,64)——只要有一个样本形状异常,NumPy就会把整个数组变成一维的object数组。可以用下面的代码找出异常样本:

# 遍历所有样本,打印形状不符的索引和形状
for idx, sample in enumerate(main_array):
    if np.shape(sample) != (11, 64):
        print(f"样本{idx}形状异常:{np.shape(sample)}")

找到异常样本后要么修正它的形状,要么剔除,之后再用上面的方法转成三维数组即可。

内容的提问来源于stack exchange,提问作者2yan

火山引擎 最新活动