小编A B*_*A B的帖子

将0插入2d数组

我有一个数组x:

x = [0, -1, 0, 3]
Run Code Online (Sandbox Code Playgroud)

我想要y:

y = [[0, -2, 0, 2],
     [0, -1, 0, 3],
     [0,  0, 0, 4]]
Run Code Online (Sandbox Code Playgroud)

第一行是x-1第二行x,第三行是第三行x+1.所有偶数列索引都为零.

我正在做:

y=np.vstack(x-1, x, x+1)
y[0][::2] = 0
y[1][::2] = 0
y[2][::2] = 0
Run Code Online (Sandbox Code Playgroud)

我以为可能会有一个单行代替4而不是4.

python arrays numpy

13
推荐指数
1
解决办法
852
查看次数

将二维 numpy 数组转换为字符串

我是 Python 新手,正在尝试转换 2d numpy 数组,例如:

a=numpy.array([[191.25,0,0,1],[191.251,0,0,1],[191.252,0,0,1]])
Run Code Online (Sandbox Code Playgroud)

到一个字符串,其中列条目由一个分隔符 '\t' 分隔,行由另一个分隔符 '\n' 分隔,控制每列的​​精度,以获得:

b='191.250\t0.00\t0\t1\n191.251\t0.00\t0\t1\n191.252\t0.00\t0\t1\n'
Run Code Online (Sandbox Code Playgroud)

首先,我通过以下方式创建数组:

import numpy as np

col1=np.arange(191.25,196.275,.001)[:, np.newaxis]
nrows=col1.shape[0]

col2=np.zeros((nrows,1),dtype=np.int)
col3=np.zeros((nrows,1),dtype=np.int)
col4=np.ones((nrows,1),dtype=np.int)

a=np.hstack((col1,col2,col3,col4))
Run Code Online (Sandbox Code Playgroud)

然后我通过以下两种方法之一生成 b:

方法一:

b=''
for i in range(0,a.shape[0]):
    for j in range(0,a.shape[1]-1):
        b+=str(a[i,j])+'\t'
    b+=str(a[i,-1])+'\n'
b
Run Code Online (Sandbox Code Playgroud)

方法二:

b=''
for i in range(0,a.shape[0]):
    b+='\t'.join(['%0.3f' %x for x in a[i,:]])+'\n'
b
Run Code Online (Sandbox Code Playgroud)

但是,我猜有更好的方法来生成 a 和 b。我正在寻找最有效的方法(即内存、时间、代码紧凑性)来创建 a 和 b。


跟进问题

谢谢迈克,

b = '\n'.join('\t'.join('%0.3f' %x for x in y) for y in a)+'\n'
Run Code Online (Sandbox Code Playgroud)

为我工作,但我有一些后续问题(这不适合评论部分):

  1. 虽然这更紧凑,但速度是否与执行嵌套 for 循环相同,因为这似乎在括号内发生?
  2. 我知道 x …

python arrays string numpy delimiter

4
推荐指数
1
解决办法
1万
查看次数

将字符串转换为二维 numpy 数组

我正在尝试将“b”(列条目由一个分隔符分隔且行由另一个分隔符分隔的字符串)转换为“a”(二维 numpy 数组),例如:

b='191.250\t0.00\t0\t1\n191.251\t0.00\t0\t1\n191.252\t0.00\t0\t1\n'
a=numpy.array([[191.25,0,0,1],[191.251,0,0,1],[191.252,0,0,1]])
Run Code Online (Sandbox Code Playgroud)

我这样做的方式是(根据我的知识,“a”中有 4 列):

a=numpy.array(filter(None,re.split('[\n\t]+',b)),dtype=float).reshape(-1,4)
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

python arrays string numpy

3
推荐指数
1
解决办法
9597
查看次数

标签 统计

arrays ×3

numpy ×3

python ×3

string ×2

delimiter ×1