为了账号安全,请及时绑定邮箱和手机立即绑定

在for循环中检查numpy数组的维度,然后将二维数据转换为一维数据

在for循环中检查numpy数组的维度,然后将二维数据转换为一维数据

千巷猫影 2021-10-26 18:47:48
我正在使用 polyfit 函数向我的数据集添加趋势线。因为我得到了很多数据集(比这里找到的四个例子多得多),我想创建一个 for 循环来检查数据的维度——正如我们所知,polyfit-function 只接受 1- D 数据。我使用的新手方法np.ravel()是这样的:import numpy as npdata_a = np.array([1, 2, 3, 4, 5, 6])data_b = np.array([10, 20, 30, 40, 50, 60])data_c = np.transpose(np.array([[1, 2, 3, 4, 5, 6]]))data_d = np.array([[10, 20, 30, 40, 50, 60]])for items in (data_a, data_b, data_c, data_d):    if items.ndim == 1:        print('It is an 1-D array -- no action needed.')        print(items.ndim)    elif items.ndim == 2:        print('It is an 2-D array, please do not be alarmed, I will convert it for you.')        items.ravel()        print(items.ndim)    else:        print('It contains more than two dimensions.')print(data_a.ndim)print(data_b.ndim)print(data_c.ndim)print(data_d.ndim)如果我np.ravel()在 for 循环之外的任何数据集上使用过,它就会像预期的那样工作。例如:data_c_2 = data_c.ravel()data_d_2 = data_d.ravel()但是由于我有很多数据集,我会更好(在我看来,也许是愚蠢的头脑中)在检查维度的同时遍历它。如果有人能抽出时间帮助我,我将不胜感激。如果有人能解释我在 for 循环中做错了什么,我也将不胜感激,以便我更好地理解它。
查看完整描述

1 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

对于一个。items.ravel()返回一个新数组。在循环之外,您可以使用以下内容:

data = data.ravel()

您不能在循环内执行此操作,因为您只会更改循环变量。如果你想“就地”解开,你可以使用np.resize, from the docs

就地更改数组的形状和大小。

因此,只需替换:

items.ravel()

和:

items.resize(items.size)


查看完整回答
反对 回复 2021-10-26
  • 1 回答
  • 0 关注
  • 153 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信