我正试图根据它们的顺序打印两个numpy数组。我正在尝试在没有for循环的情况下执行此函数。我不知道该怎么做。我本质上想把普通的Python版本变成numpy形式
a = np.arange(0, 15, 1)
b = np.arange(0, 150, 10)
香草Python版本
for i in range(len(a)):
print("when a is", a[i], "b is", b[i])
预期输出:
when a is 1 b is 10
when a is 2 b is 20
when a is 3 b is 30
...
我写这个冗长的答案是因为我怀疑你不太理解"无循环";当使用CCD_ 1时。
所以你有两个相同长度的阵列:
In [256]: a = np.arange(0,15,1)
...: b = np.arange(0,150,10)
In [257]: a
Out[257]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
In [258]: b
Out[258]:
array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120,
130, 140])
In [259]: a.shape
Out[259]: (15,)
In [260]: b.shape
Out[260]: (15,)
每对的直接打印-如果a
和b
是列表而不是数组,这甚至会更快,但实时限制是打印,而不是迭代。(为了方便起见,我使用了新的f
格式。)
In [261]: for i,j in zip(a,b):print(f'when a is {i}, b is {j}')
when a is 0, b is 0
when a is 1, b is 10
when a is 2, b is 20
....
when a is 13, b is 130
when a is 14, b is 140
我们可以从两个阵列中制作一个二维阵列:
In [262]: np.array((a,b))
Out[262]:
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14],
[ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120,
130, 140]])
如果你喜欢列显示:
In [263]: np.array((a,b)).T
Out[263]:
array([[ 0, 0],
[ 1, 10],
[ 2, 20],
[ 3, 30],
...
[ 13, 130],
[ 14, 140]])
这就形成了一个(15,2)数组。构造这样一个数组还有其他几种方法。
虽然总体布局与您的打印相匹配,但包括所有额外的文本将需要更多的工作。numpy
没有针对字符串工作进行优化;这是一个数字工具。如果你想要花哨的格式,请使用python循环。
np.savetxt
写入csv
文件。它对行进行迭代,并对每一行进行格式化写入,如:
In [268]: for row in Out[263]: print('When a is %d, b is %d'%tuple(row))
When a is 0, b is 0
When a is 1, b is 10
When a is 2, b is 20
When a is 3, b is 30
In [270]: np.savetxt('test.txt', Out[263], fmt='when a is %d, b is %d')
In [271]: cat test.txt
when a is 0, b is 0
when a is 1, b is 10
when a is 2, b is 20
when a is 3, b is 30
使用a
和b
创建一个新数组,然后使用numpy
0:
a = np.arange(0,15,1)
b = np.arange(0,150,10)
c = np.array([a, b])
np.apply_along_axis(lambda x: print(f'when a is {x[0]} b is {x[1]}'), 0, c)
输出:
when a is 0 b is 0
when a is 1 b is 10
when a is 2 b is 20
when a is 3 b is 30
when a is 4 b is 40
...
顺便说一句,我认为print
不是这个函数的正确用法——它返回了一系列None
的s。如果需要一系列字符串,请删除print
。
for循环到底出了什么问题?
如果你真的不想使用for循环,那么
import numpy as np
a = np.arange(0, 15, 1)
b = np.arange(0, 150, 10)
text_1 = np.array(['what a is']*len(a))
text_2 = np.array(['b is']*len(a))
print(np.array([text_1, a, text_2, b]).transpose())
会起作用,但到处都是引号。请注意,只有当a和b的长度相同时,它才会起作用。您可以使用np.set_printoptions来精确格式化它的外观。