如何在Python中将零添加到数组的第二维?

问题描述

我有一个形状为(1111,)的纬度数组,正在尝试使用matplotlib pcolormesh,但是由于我的数组不是2D数组,所以我遇到了一个错误,所以我遇到了错误not enough values to unpack (expected 2,got 1)。有没有办法将1111零添加到纬度数组的第二维?下面是导致错误代码

import matplotlib.cm as cm

cmap = cm.get_cmap('BrBG')

cs = plt.pcolormesh(longitude.values,latitude.values,dens,cmap = cmap)

plt.title('Satellite Trajectory')
plt.xlabel('Longitude')
plt.ylabel('Latitude')

plt.savefig('Satellite Trajectory',dpi=200,bBox_inches='tight',pad_inches=0.025)

cb = plt.colorbar(cs,orientation = 'vertical')
cb.set_label(r'Density')

这是我的熊猫纬度数组的前几行:

0       50.224832
1       50.536422
2       50.847827
3       51.159044
4       51.470068
5       51.780895
6       52.091521
7       52.401941
8       52.712151
9       53.022145
10      53.331919

我对经度数组也有同样的问题。以下是一些经度值供参考。

0       108.873007
1       108.989510
2       109.107829
3       109.228010
4       109.350097
5       109.474136
6       109.600176
7       109.728265
8       109.858455
9       109.990798
10      110.125348

所示的另一个阵列是dens,它是一个密度阵列,形状为(5,91,181)。以下是一些可供参考的值:

[6.042968853864891e-12,6.042894605467602e-12,6.042777396826408e-12,6.042616263531836e-12,6.042410211830538e-12,6.042158216350682e-12,6.0361190688090634e-12,6.038107492458882e-12,6.039984972063208e-12,6.041748879958635e-12,6.030375732644546e-12,6.027898597657696e-12,6.0251851962303345e-12,6.0390021800772395e-12,6.035096323493865e-12,6.030879347062723e-12,6.026343416350273e-12,6.021480432118012e-12,6.01628202402901e-12,6.042274874237314e-12,6.040409269411221e-1

我只是卡住了如何执行pcolormesh而没有出现以下错误

ValueError                                Traceback (most recent call last)
<ipython-input-54-685815191229> in <module>
      7 
      8 
----> 9 cs = plt.pcolormesh(longitude.values,cmap = cmap)
     10 
     11 plt.title('Satellite Trajectory')

~\Anaconda3\lib\site-packages\matplotlib\pyplot.py in pcolormesh(alpha,norm,cmap,vmin,vmax,shading,antialiased,data,*args,**kwargs)
   2771         *args,alpha=alpha,norm=norm,cmap=cmap,vmin=vmin,2772         vmax=vmax,shading=shading,antialiased=antialiased,-> 2773         **({"data": data} if data is not None else {}),**kwargs)
   2774     sci(__ret)
   2775     return __ret

~\Anaconda3\lib\site-packages\matplotlib\__init__.py in inner(ax,**kwargs)
   1808                         "the Matplotlib list!)" % (label_namer,func.__name__),1809                         RuntimeWarning,stacklevel=2)
-> 1810             return func(ax,**kwargs)
   1811 
   1812         inner.__doc__ = _add_data_doc(inner.__doc__,~\Anaconda3\lib\site-packages\matplotlib\axes\_axes.py in pcolormesh(self,alpha,**kwargs)
   5980         allmatch = (shading == 'gouraud')
   5981 
-> 5982         X,Y,C = self._pcolorargs('pcolormesh',allmatch=allmatch)
   5983         Ny,Nx = X.shape
   5984         X = X.ravel()

~\Anaconda3\lib\site-packages\matplotlib\axes\_axes.py in _pcolorargs(funcname,allmatch,*args)
   5547                 if isinstance(Y,np.ma.core.MaskedArray):
   5548                     Y = Y.data
-> 5549             numRows,numCols = C.shape
   5550         else:
   5551             raise TypeError(

ValueError: not enough values to unpack (expected 2,got 1)

我认为这是因为经纬度和纬度数组的形状,所以我寻求填充第二维的帮助,因此我使用的数组是(1111,1111)而不是(1111,)。

如果您还有其他建议,我将为您提供帮助。我是Python的新手。

解决方法

在这种情况下,请使用for循环或列表理解。

import * as cdk from '@aws-cdk/core';
import * as dms from '@aws-cdk/aws-dms';

export class DmsStack extends cdk.Stack {
  constructor(scope: cdk.Construct,id: string,props?: cdk.StackProps) {
    super(scope,id,props);

    // Create a subnet group that allows DMS to access your data
    const subnet = new dms.CfnReplicationSubnetGroup(this,'SubnetGroup',{
      replicationSubnetGroupIdentifier: 'cdk-subnetgroup',replicationSubnetGroupDescription: 'Subnets that have access to my data source and target.',subnetIds: [ 'subnet-123','subnet-456' ],});

    // Launch an instance in the subnet group
    const instance = new dms.CfnReplicationInstance(this,'Instance',{
      replicationInstanceIdentifier: 'cdk-instance',// Use the appropriate instance class: https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.Types.html
      replicationInstanceClass: 'dms.t2.small',// Setup networking
      replicationSubnetGroupIdentifier: subnet.replicationSubnetGroupIdentifier,vpcSecurityGroupIds: [ 'sg-123' ],});

    // Create endpoints for your data,see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dms-endpoint.html
    const source = new dms.CfnEndpoint(this,'Source',{
      endpointIdentifier: 'cdk-source',endpointType: 'source',engineName: 'mysql',serverName: 'source.database.com',port: 3306,databaseName: 'database',username: 'dms-user',password: 'password-from-secret',});

    const target = new dms.CfnEndpoint(this,'Target',{
      endpointIdentifier: 'cdk-target',endpointType: 'target',engineName: 's3',s3Settings: {
        bucketName: 'target-bucket'
      },});

    // Define the replication task
    const task = new dms.CfnReplicationTask(this,'Task',{
      replicationInstanceArn: instance.ref,migrationType: 'full-load',// https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dms-replicationtask.html#cfn-dms-replicationtask-migrationtype
      sourceEndpointArn: source.ref,targetEndpointArn: target.ref,tableMappings: JSON.stringify({
        "rules": [{
          "rule-type": "selection","rule-id": "1","rule-name": "1","object-locator": {
            "schema-name": "%","table-name": "%"
          },"rule-action": "include"
        }]
      })
    })
  }
}