我有一个数组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 新手,正在尝试转换 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)
为我工作,但我有一些后续问题(这不适合评论部分):
我正在尝试将“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)
有没有更好的办法?